zoukankan      html  css  js  c++  java
  • 用 Jest 进行单元测试

    测试的类型

    测试是用来检查你代码的代码。测试会使你对自己的程序更有信心。它们还能够防止你在修复一个 bug 时生成另一个 bug。你可以测试程序的方方面面,从单个函数及其返回值到在浏览器中运行的复杂程序。由于这是本课程的第一篇文章,因此我会简要对比一些流行的测试类型。

    单元测试

    单元测试覆盖了代码块,确保它们在运行时没有问题。被测试的单元可以是函数、模块和类等。单元测试应该相互隔离并且彼此独立。对于给定的输入,用单元测试检查结果,通过尽早发现问题并避免退化,可以帮助你确保程序的每个部分都能按预期工作。

    集成测试

    即使你的所有单元测试都通过了,也只能代表每个部分可以正常工作。尽管如此,该程序仍可能失败。集成测试涵盖跨模块流程,其中各个模块在一起工作时进行组合和测试。多亏了他,你可以用一种方法来确保你的代码在整体上能够正常运行。

    端到端测试(E2E)

    与其他类型的测试相反,端到端测试始终在浏览器(或类似浏览器)环境中运行。它可能是打开的真正浏览器,并且在其中运行测试。它也可能是无头浏览器环境,即没有用户界面运行的浏览器。 E2E 测试的重点是在我们正在运行的程序中模拟实际用户。他们将模拟滚动,单击和键入之类的行为,并从实际用户的角度检查我们的程序是否运行良好。

    用 Jest 进行单元测试

    Jest 是 Facebook 开发的测试框架。它的目标之一是通过现成可用的工具提供“零配置”体验。它已经存在了一段时间,并且快速可靠。

    npm install --save-dev jest

    别忘了把它添加到 npm 脚本中。

    package.json
    "scripts": {
      "test": "jest"
    }
    为了简单起见,我在这里将 Jest 与简单的纯 Node.js 模块一起使用(不包括 webpack)。稍后我们将学习如何在 react 中使用 Jest

    首先,让我们创建一些可以测试的简单函数。

    divide.js
    function divide(a, b) {
      return a / b;
    }
    module.exports = divide;

    Jest 用正则表达式确定要测试的文件默认情况下,如果它们位于 tests 目录中或以 test 或 .spec 为后缀,将执行 .js 和 .jsx文件。你可以在项目的 package.json 文件中用 testRegex 属性指定。

    package.json
    "jest": {
      "testRegex": "(/__tests__/.*|(\.|/)(test|spec))\.jsx?$"
    }

    最后,让我们创建测试文件。为了遵循默认的命名配置,我们将其命名为 divide.test.js

    divide.test.js
    const divide = require('./divide');
     
    test('dividing 6 by 3 equals 2', () => {
      expect(divide(6, 3)).toBe(2);
    });

    用 npm run test 命令运行该测试:

     PASS  ./divide.test.js
      ✓ dividing 6 by 3 equals 2 (5ms)

    test 函数用来运行测试。它包含三个参数:测试的名称,包含期望值的函数和超时(以毫秒为单位)。超时默认为 5 秒,并指定如果测试花费的时间太长,则中止测试之前要等待多长时间。

    expect 函数用于测试值。作为参数,它接受你要测试的值:在我们的例子中,它是 divide 函数的返回。你可以调用一组 matcher 函数(例子中使用的 toBe)以某种方式测试该值。有关完整信息,请访问 Jest 文档。

    广州品牌设计公司https://www.houdianzi.com PPT模板下载大全https://redbox.wode007.com

    分组测试

    每个文件通常会有一个以上的测试。使用 Jest,你可以使用 describe 函数对它们进行分组。它创建了一个可以合并多个测试的块。为了更好地显示它,让我们在全局 Math 对象上进行一些测试。

    describe('in the math global object', () => {
     
      describe('the random function', () => {
        it('should return a number', () => {
          expect(typeof Math.random()).toEqual('number');
        })
        it('should return a number between 0 and 1', () => {
          const randomNumber = Math.random();
          expect(randomNumber).toBeGreaterThanOrEqual(0);
          expect(randomNumber).toBeLessThan(1);
        })
      });
     
      describe('the round function', () => {
        it('should return a rounded value of 4.5 being 5', () => {
          expect(Math.round(4.5)).toBe(5);
        })
      });
     
    })

    你可能会注意到用了 it 函数而不是 test 函数。它是常用的别名。运行 it === test 会返回 true。像这样对测试进行分组可以使代码更整洁。你应该关心程序代码和对其进行测试的代码的质量。

    如果出现问题,除了使代码更具可读性之外,它还有助于提供更友好的错误消息。如果将测试改为包含 expect(typeof Math.random()).toEqual('string'),则会看到以下消息:

     FAIL  ./math.test.js
    in the math global object › the random function › should return a number
        expect(received).toEqual(expected)
    
        Expected value to equal:
          "string"
        Received:
          "number"

    总结

    作为介绍,我们已经解释了最基本的 JavaScript 测试类型。涵盖的第一类测试是“单元测试”。为了执行它们,我们已经了解了 Jest 框架的基础知识。它包括有关如何运行测试(安装和文件命名)的知识。为了运行测试,我们使用了test、 it 和 describe 函数。

  • 相关阅读:
    java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
    项目开发中关于权限的实现方案简单描述(帮助以后回忆)
    一些比较有用的模板
    递归之遍历部门
    关于s2sh框架关于hibernate懒加载问题的说明和解决方案
    Hibernate实体映射配置(XML)简单三步完美配置
    项目添加性能监控日志
    redis常用命令大全
    redis主从同步
    redis之哨兵部署运行日志解读
  • 原文地址:https://www.cnblogs.com/qianxiaox/p/14124506.html
Copyright © 2011-2022 走看看