介绍
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); });
- 配置文件 [https://jestjs.io/zh-Hans/docs/configuration](https://jestjs.io/zh-Hans/docs/configuration)
- CLI option [https://jestjs.io/zh-Hans/docs/cli](https://jestjs.io/zh-Hans/docs/cli)
```bash
jest --watch # 默认执行 jest -o 监视有改动的测试
jest --watchAll # 监视所有测试
使用ESM
yarn add --dev babel-jest @babel/core @babel/preset-env
// babel.config.js
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
Jest 在运行测试的时候会自动找到 Babel 将 ES6 代码转换为 ES5 执行。
Jest 结合 Babel 的运行原理:运行测试之前,结合 Babel,先把你的代码做一次转化,模块被转换为了 CommonJS,运行转换之后的测试用例代码。
API
在测试文件中,Jest 将所有这些方法和对象放入全局环境中。您无需要求或导入任何内容即可使用它们。但是,如果您喜欢显式导入,则可以:
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
- …