阅读(3064) (0)

Jest 从安装开始

2021-08-10 15:49:54 更新

使用 ​yarn​ 安装 Jest︰

  1. yarn add --dev jest

或使用 ​npm​ 安装 Jest:

  1. npm install --save-dev jest

注:Jest的文档统一使用​yarn​命令,不过使用​npm​也是可行的。 你可以在yarn的说明文档里看到​yarn与​npm​之间的对比。

让我们开始为一个假设函数编写测试,该函数将两个数字相加。 首先,创建一个​sum.js ​文件:

  1. function sum(a, b) {
  2. return a + b;
  3. }
  4. module.exports = sum;

然后,创建一个名为​ sum.test.js​ 的文件。 这将包含我们的实际测试:

  1. const sum = require('./sum');
  2. test('adds 1 + 2 to equal 3', () => {
  3. expect(sum(1, 2)).toBe(3);
  4. });

将下面的配置部分添加到你的​ package.json​ 里面:

  1. {
  2. "scripts": {
  3. "test": "jest"
  4. }
  5. }

最后,运行​ yarn test​ 或 ​npm run test​ ,Jest将打印下面这个消息:

  1. PASS ./sum.test.js
  2. ✓ adds 1 + 2 to equal 3 (5ms)

如此一来,你就成功地写出第一个Jest测试 !

此测试使用 ​expect ​和 ​toBe ​来测试两个值完全相同。 若要了解Jest关于测试方面更多的能力,请参阅使用适配器

在命令行运行

你可以通过命令行直接运行​Jest​(前提是​jest​已经处于你的环境变量 ​PATH​中,例如通过 ​yarn global add jest​ 或 ​npm install jest --global​安装的​Jest​) ,并为其指定各种有用的配置项。

这里演示了如何对能匹配到 ​my-test​ 的文件运行 ​Jest​、使用​config.json ​作为一个配置文件,并在运行完成后显示一个原生的操作系统通知。

  1. jest my-test --notify --config=config.json

如果你想要了解更多关于通过命令行来运行 ​jest ​的内容,请继续阅读 Jest CLI 选项 页面。

更多配置

生成一个基础配置文件

基于你的项目,Jest将会提出几个问题,并将创建一个基本的配置文件,每个选项都有一个简短的说明:

  1. jest --init

使用 Babel

如果需要使用 Babel,可以通过 ​yarn​来安装所需的依赖。

  1. yarn add --dev babel-jest @babel/core @babel/preset-env

可以在工程的根目录下创建一个​babel.config.js​文件用于配置与你当前Node版本兼容的Babel:

  1. // babel.config.js
  2. module.exports = {
  3. presets: [
  4. [
  5. '@babel/preset-env',
  6. {
  7. targets: {
  8. node: 'current',
  9. },
  10. },
  11. ],
  12. ],
  13. };

Babel的配置取决于具体的项目使用场景 ,可以查阅 Babel官方文档来获取更多详细的信息。

使 Babel 配置具有 jest-aware

如果没有设置为其他内容,Jest 将设置​process.env.NODE_ENV​为​'test'​。你可以在配置中使用它来有条件地仅设置 Jest 所需的编译,例如

  1. // babel.config.js
  2. module.exports = api => {
  3. const isTest = api.env('test');
  4. // You can use isTest to determine what presets and plugins to use.
  5. return {
  6. // ...
  7. };
  8. };
注意:当你安装 Jest 时,​babel-jest​ 是会被自动安装的,并且如果你的项目下存在一个 Babel 配置文件时,它将会自动对相关文件进行转义。 如果要避免这个行为,你可以显式的重置 ​transform​ 配置项:
  1. // jest.config.js
  2. module.exports = {
  3. transform: {},
  4. };

Babel 6 支持

Jest 24 放弃了对 Babel 6 的支持。我们强烈建议大家升级到 Babel 7,它得到了积极维护。但是,如果你无法升级到 Babel 7,请继续使用 Jest 23 或升级到 Jest 24 并​babel-jest​锁定版本 23,如下例所示:

  1. "dependencies": {
  2. "babel-core": "^6.26.3",
  3. "babel-jest": "^23.6.0",
  4. "babel-preset-env": "^1.7.0",
  5. "jest": "^24.0.0"
  6. }

虽然我们通常建议使用每个 Jest 包的相同版本,但此解决方法将允许你现在继续使用最新版本的 Jest 和 Babel 6。

使用 webpack

Jest 可以用于使用 webpack 来管理资源、 样式和编译的项目中。 webpack 与其他工具相比多了一些独特的挑战。 参考 webpack 指南 来开始起步。

使用 parcel

Jest 可用于使用parcel bundler管理资产、样式和编译(类似于webpack)的项目中。包裹需要零配置。请参考官方文档开始。

使用 TypeScript

Jest 通过 Babel 支持 TypeScript。首先,请确保你遵循了上面使用 Babel 的说明。接下来,通过​yarn​安装​@babel/preset-typescript​:

  1. yarn add --dev @babel/preset-typescript

然后添加​@babel/preset-typescript​到你的​​​babel.config.js​.​​

  1. // babel.config.js
  2. module.exports = {
  3. presets: [
  4. ['@babel/preset-env', {targets: {node: 'current'}}],
  5. + '@babel/preset-typescript',
  6. ],
  7. };

不过,在配合使用TypeScript与Babel时,仍然有一些注意事项 。 因为 Babel 对 TypeScript 的支持是 transpilation,Jest 不会在运行时对你的测试进行类型检查。 如果你想实现这个功能,你可以使用 ​ts-jest​。