0


JavaScript 单元测试

在测试领域,检查单个功能与测试整个应用程序端到端是不同的。虽然两者同样重要,但测试每个功能(也称为单元)是必要的,以确保应用程序中的每个函数都按预期执行。这就是单元测试的作用。

截至2022年,98%的网站使用JavaScript作为客户端编程语言,这显示了它的日益流行。

由于JavaScript或JS是一种流行且不断发展的用于开发Web应用程序的编程语言,因此有必要了解如何在JavaScript中执行单元测试。本文将探讨如何执行这些测试,这些测试应该在哪里运行以及为什么。

什么是单元测试?

单元测试验证系统中软件单元的行为。它验证称为“单元”的代码库的小而孤立的部分是否按照开发人员的意图行为。

单元测试通过将其实际行为与完全隔离的预期行为进行比较,验证应用程序的最小部分或组件。

在这里,“完全隔离”意味着在单元测试期间,开发人员不会将应用程序与外部依赖项(例如数据库,文件系统或HTTP服务)连接起来。

这使得单元测试快速和稳定,因为它们不会因为与那些外部服务集成的问题而失败。

  1. 不要测试系统接口或第3方库

例如以下函数:


        function getLocation() {

                return window.location

        }

为什么编写单元测试?

通常,开发人员首先编写单元测试,然后编写软件代码。这种方法称为测试驱动开发(TDD)。

在TDD中,将需求转化为具体的测试用例,然后改进软件以通过新测试。

在单元测试的情况下,它允许在不影响其他单元或软件功能的情况下修改代码。这使得开发人员的工作更加容易,因为在此阶段很容易定位错误,从而节省时间和金钱。

此外,在单元测试环境中,产品的各个模块相互隔离并具有自己的责任区域。

在这种情况下,测试更可靠,因为它们在一个封闭的环境中运行。由于可靠性,代码也变得可靠。

除了上述事实,让我们探讨单元测试的各种好处。

单元测试的好处

  1. 单元测试的主要优点是它们的锐利关注点。由于它们测试单个功能,它们提供精确的反馈。如果单元测试失败,在大多数情况下,测试人员可以确定正在测试的特定功能是问题所在。
  2. 单元测试有助于快速轻松地查找和修复错误。
  3. 单元测试有助于提高代码质量。
  4. 单元测试有助于改善应用程序架构。
  5. 单元测试充当文档。
  6. 单元测试也以其速度而闻名。由于它们快速,它们经常执行,成为几乎持续提供有价值反馈的来源。

创建单元测试的最佳实践

创建单元测试时应遵循以下最佳实践:

  • 测试应该快速简单,这意味着开发人员需要以更高的速度运行测试用例,因为它服务于单元测试的目的。如果它们很慢,开发人员将不会像应该那样经常运行测试用例。此外,单元测试用例越简单,测试结果越准确。
  • 测试用例不重复实现逻辑。
  • 测试用例应该是确定性的-只要它们的代码不变,就表现出相同的行为。
  • QAs必须在真实的浏览器和设备上执行测试,而不是在仿真器和模拟器上执行测试,以保持测试的确定性。如果没有接触实际的生产环境(真实的,功能真实的设备),测试结果将远远不确定或准确。
  • 为测试用例采用有影响力的命名约定

JavaScript单元测试框架

JavaScript单元测试是一种方法,在其中为Web页面或应用程序模块编写JavaScript测试代码。

然后将其与HTML作为内联事件处理程序组合,并在浏览器中执行,以测试所有功能是否按预期工作。然后将这些单元测试组织在测试套件中。

以下JavaScript测试框架有助于在JavaScript中进行单元测试。它们如下:

  1. Unit.js

     一个用于JavaScript的断言库,在Node.js和浏览器上运行。它与任何测试运行器和单元测试框架(如Mocha,Jasmine,Karma,protractor(用于Angular应用程序的E2E测试框架),QUnit等)一起使用。
    
  2. Mocha

Mocha是一个测试框架,既可以在Node.js中运行,也可以在浏览器中运行。该框架通过串行运行测试使异步测试变得简单。Mocha测试串行运行,允许灵活和准确的报告,同时将未捕获的异常映射到正确的测试用例。它提供对所有浏览器的支持,包括无头Chrome库,并方便开发人员编写测试用例。

  1. Jest

它是一个基于JavaScript构建的开源测试框架,主要设计用于与基于React和React Native的Web应用程序一起使用。通常,当在任何软件的前端运行单元测试时,它们并不是非常有用。这主要是因为前端的单元测试需要广泛的,耗时的配置。使用Jest框架可以大大减少这种复杂性。

  1. Jasmine

Jasmine是一种流行的JavaScript行为驱动开发框架,用于单元测试JavaScript应用程序。它提供了运行同步和异步代码的自动化测试的实用程序。它也非常有利于前端测试。

  1. Karma

Karma是一个基于节点的测试工具,允许您在多个浏览器中测试JavaScript代码。它使测试驱动开发变得快速,有趣和容易,并在技术上被称为测试运行器。

  1. Cypress

Cypress框架是基于Mocha构建的基于JavaScript的端到端测试框架-一个功能丰富的JavaScript测试框架,可在浏览器中运行异步测试,使其变得简单和方便。在Cypress中进行单元测试甚至不需要运行Web服务器。这使得Cypress成为测试旨在在浏览器中使用的JS / TS库的理想工具。

  1. NightwatchJS

Nightwatch.js框架是基于Selenium的测试自动化框架,用Node.js编写,并使用W3C WebDriver API(以前是Selenium WebDriver)。它使用与WebDriver服务器(例如ChromeDriver或Selenium Server)通信的restful HTTP API。协议由W3C WebDriver规范定义,该规范源自JSON Wire协议。

编写测试用例

编写测试用例时,应遵循以下最佳实践:

  • 对测试用例采用有影响力的命名约定
  • 测试用例应该具有最简单可测试的单元功能,并尽可能独立于其他代码
  • 在测试用例中涵盖功能的正常和边缘情况
  • 使用断言库对测试结果进行验证

参考链接:

JavaScript Unit Testing Tutorial | BrowserStack

test-driven development (TDD)

Best Practices for Unit Testing

Front End Testing: A Beginner's Guide | BrowserStack

Front End Testing: A Beginner's Guide | BrowserStackJest vs Mocha vs Jasmine


本文转载自: https://blog.csdn.net/benchi_de_chaoge/article/details/134720845
版权归原作者 benchi_de_chaoge 所有, 如有侵权,请联系我们删除。

“JavaScript 单元测试”的评论:

还没有评论