在前端,通常会测试最终用户与我们的应用程序的交互。我们应该向用户保证,当他们登录、打开弹出窗口、添加评论或与我们的应用程序进行任何其他交互时,不会遇到任何错误和不愉快的体验。
前端测试,如果做得正确,将使我们的用户满意,并在使用我们的应用程序时有良好的性能体验。另一方面,对于开发人员来说,解决bug会节省大量时间,或者在添加新功能时,不会破坏代码以前的行为。
测试需要时间,也需要与开发过程中的变化保持一致。此外,随着设备和浏览器的发展,我们需要跟上时代。在软件测试中,有一个概念叫做脆弱测试问题。这可以定义为系统中的一个变化导致数百个测试失败。
我们将描述一些可能有助于测试系统设计的方法和策略:
在著名的测试金字塔中,在底层中,我们会遇到测试覆盖率较少的单元测试,但它们是执行速度最快的单元测试。在第二级中,我们看到集成测试,它有更多的覆盖面,但是它们较慢,因为它可能与外部部分连接。最后,我们有E2E测试或一些呼叫接受测试,它们覆盖了应用程序的很大一部分,但它们是执行最慢的。
单元测试独立地检查我们的组件是否正常工作。它们还覆盖了要测试的边缘案例,这使得我们的代码库更加可靠。单元测试之后是集成测试的实现。集成测试检查两个独立开发的软件单元或模块在相互连接时的通信。它们分析系统连接时的行为,并检查微服务之间的交互。它们还包括API连接,这就是为什么它们在单元测试方面比较慢,因为连接可能会延迟,或者服务可能会关闭。在前端,集成测试用于检查返回API的数据是否具有正确的对象、数组或格式。
E2E测试模拟用户行为,检查用户与应用程序的所有交互。它们是在真实浏览器中执行的集成测试的专门版本。它们通常在合并或发布之前运行,因为完成测试可能需要几个小时。
易访问性测试检查用户界面是否容易被每个用户使用,并使我们的应用程序对残障人士可用。Jest-axe是一个很棒的Jest测试库,它允许我们检查应用程序的可访问性。
UI测试检查 我们的应用程序的用户界面工作正常。如果用户输入、点击复选框或删除元素,应该可以正常工作并按预期更新UI的状态。
一些前端测试库回顾
Jest是一个主要用于前端单元和集成测试的库。它的机制实现了巧妙的并行测试,对于测试文件多的大项目非常快。
测试库是一个我们可以编写单元测试和集成测试的库。它有助于方便的选择器、触发事件、配置、处理异步代码等等。
Cypress是一个库,它将其测试注入到一个网站中,Cypress.io在浏览器中自行运行该网站。我们可以高效地编写单元、集成和端到端测试。它为开发者提供了更快的体验,我们可以很容易地在浏览器上看到错误。
Applitools用于可视化回归测试。凭借其先进的人工智能技术,它可以检测图像和DOM之间的差异。这是非常有用的检查我们的网站的外观是否与前一个相同,或者是否发生了错误。此外,它检查不同的浏览器和平台,如果用户可以正确地看到任何项目或按钮在网站上正确时,在移动或网络上。
结论
前端测试应该是我们开发的一部分,以便在代码投入生产之前解决问题。我们应该编写单元测试来检查应用程序中的每一项功能,还应该开发集成测试来检查所有组件和模块是否能够正确地协同工作。另一方面,我们应该编写E2E测试来自动化手动点击测试,并关注用户如何与我们的应用程序交互。