当前位置: 首页 > 科技观察

为什么前端测试如此重要?

时间:2023-03-21 13:50:35 科技观察

前端测试,如果正确完成,将使我们的用户在使用我们的应用程序时感到高兴并获得良好的性能体验。根据Bob大叔的说法,测试是系统的一部分;许多开发人员的想法恰恰相反,因为他们不进行部署。他宣称这是一个灾难性的时刻,因为测试的作用是支持开发并保持系统健壮且易于更改。在前端,测试最终用户与我们应用程序的交互是很常见的。我们应该向用户保证,他们在登录、打开弹出窗口、添加评论或与我们的应用程序进行任何其他交互时不会遇到任何错误和不愉快的体验。如果正确完成前端测试,将使我们的用户满意并在使用我们的应用程序时体验良好的性能。另一方面,对于开发人员来说,在不破坏代码先前行为的情况下,将节省大量时间来解决错误,或添加新功能。为什么考试不好?如何设计测试系统?测试需要时间,还需要与开发过程中的变化保持一致。此外,随着设备和浏览器的发展,我们需要与时俱进。在软件测试中,有一个概念叫脆弱测试问题。这可以定义为导致数百个测试失败的系统更改。Bob大叔强调了设计良好的测试系统对于我们系统的稳定性和回归的预期好处的重要性(CleanArchitecture,RobertC.Martin,2018)。我们将描述一些可能有助于我们设计测试系统的方法和策略:MartinFowler在他的文章“论测试的多样性和奇异形式”中讲述了他的那一刻。这位专家回答说,他在培训课程的第一天早上就涵盖了24种不同的单元测试定义,他说。由于单元测试有许多不同的定义,在本文中我们将包括Fowler所说的单一测试。在著名的测试金字塔的底部,我们遇到了测试覆盖率较低但执行速度最快的单元测试。在第二层,我们看到了集成测试,它的覆盖率更高,但速度较慢,因为它可能会连接到外部部件。最后,我们有端到端的测试或者一些调用验收测试,覆盖了应用的很大一部分,但是执行起来最慢。单元测试分别检查我们的组件是否正常工作。它们还涵盖了要测试的边缘案例,这使我们的代码库更加可靠。单元测试之后是集成测试的实施。集成测试检查互连时两个独立开发的软件单元或模块之间的通信。他们分析连接时系统的行为并检查微服务之间的交互。它们还包括API连接,这就是它们在单元测试方面较慢的原因,因为连接可能会延迟,或者服务可能会关闭。在前端,集成测试用于检查返回到API的数据是否采用正确的对象、数组或格式。E2E测试模拟用户行为并检查所有用户与我们应用程序的交互。它们是在真实浏览器中执行的集成测试的专门版本。它们通常在合并或发布之前运行,因为完成测试的执行可能需要数小时。在下文中,我们还提到了辅助功能和UI等测试技术:辅助功能测试检查用户界面是否易于为每个用户使用,并使我们的应用程序可供残障人士使用。Jest-axe是一个很棒的Jest测试库,它允许我们检查应用程序的可访问性。UI测试检查我们应用程序的用户界面是否正常工作。如果用户键入内容、单击复选框或删除元素,它应该可以正常工作并按预期更新UI状态。一些前端测试库的回顾Jest是一个主要用于前端单元和集成测试的库。由于其巧妙地实现了并行测试机制,对于测试文件较多的大型项目来说速度非常快。测试库是我们可以在其中编写单元和集成测试的库。它有助于方便的选择器、触发事件、配置、处理异步代码等。Cypress是一个库,可将其测试注入Cypress.io在浏览器中自行运行的网站。我们可以高效地编写单元、集成和端到端测试。它为开发人员提供了更快的体验,我们可以很容易地在其浏览器上看到错误。用于视觉回归测试的Applitools。凭借其先进的人工智能技术,它可以检测图像和DOM之间的差异。检查我们的网站是否与之前的网站相同或是否发生错误很有用。此外,如果用户在移动设备或Web上可以正确看到网站上的任何项目或按钮,它还会检查不同的浏览器和平台。结论前端测试应该是我们开发的一部分,以便在代码投入生产之前修复代码中的问题。我们应该编写单元测试来检查我们应用程序中的每个功能,还应该开发集成测试来检查所有组件和模块是否一起正常工作。另一方面,我们应该编写E2E测试来自动化手动命中测试,并以用户与我们的应用程序交互的方式为中心。我们应该编写测试来提供信心,而不仅仅是改进指标。正如RobertC.Martin所说,我们应该避免编写与系统强耦合的测试。因为即使是最微不足道的变化也会导致许多测试失败。