介绍

Jest 是 Facebook 出品的一个 JavaScript 开源测试框架。相对其他测试框架,其一大特点就是就是内置了常用的测试工具,比如零配置、自带断言、测试覆盖率工具等功能,实现了开箱即用。
Jest 适用但不局限于使用以下技术的项目:Babel,、TypeScript、 Node、 React、Angular、Vue 等。
Jest 主要特点:

  • 零配置
  • 自带断言
  • 而作为一个面向前端的测试框架, Jest 可以利用其特有的快照测试功能,通过比对 UI 代码生成的快照文件,实现对 React 等常见前端框架的自动测试。
  • 此外, Jest 的测试用例是并行执行的,而且只执行发生改变的文件所对应的测试,提升了测试速度。
  • 测试覆盖率
  • Mock 模拟 ```jsx // sum.test.js const sum = require(‘./sum’);

// 测试用例 test(‘adds 1 + 2 to equal 3’, () => { // 断言 expect(sum(1, 2)).toBe(3); });

  1. - 配置文件 [https://jestjs.io/zh-Hans/docs/configuration](https://jestjs.io/zh-Hans/docs/configuration)
  2. - CLI option [https://jestjs.io/zh-Hans/docs/cli](https://jestjs.io/zh-Hans/docs/cli)
  3. ```bash
  4. jest --watch # 默认执行 jest -o 监视有改动的测试
  5. jest --watchAll # 监视所有测试

使用ESM

  1. yarn add --dev babel-jest @babel/core @babel/preset-env
  1. // babel.config.js
  2. module.exports = {
  3. presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
  4. };

Jest 在运行测试的时候会自动找到 Babel 将 ES6 代码转换为 ES5 执行。

Jest 结合 Babel 的运行原理:运行测试之前,结合 Babel,先把你的代码做一次转化,模块被转换为了 CommonJS,运行转换之后的测试用例代码。

API

在测试文件中,Jest 将所有这些方法和对象放入全局环境中。您无需要求或导入任何内容即可使用它们。但是,如果您喜欢显式导入,则可以:

  1. import { describe, expect, test } from '@jest/globals'
  • test: 函数别名: test(name, fn, timeout)
  • it:test的别名
  • expect: 匹配器:https://jestjs.io/docs/expect
  • describe: 创建一个将几个相关测试组合在一起的块。 ```bash const myBeverage = { delicious: true, sour: false, };

describe(‘my beverage’, () => { test(‘is delicious’, () => { expect(myBeverage.delicious).toBeTruthy(); });

test(‘is not sour’, () => { expect(myBeverage.sour).toBeFalsy(); }); });

```

断言

  • toBe - toBe 使用 Object.is 来测试是否完全相等
  • not - 用来测试相反的用例
  • toEqual - 如果你想检查某个对象的值,请改用 toEqual