我正在通过npm测试运行Jest测试。Jest默认情况下并行运行测试。是否有办法使测试按顺序运行?

我有一些测试调用依赖于更改当前工作目录的第三方代码。


当前回答

使用串行测试运行器:

npm install jest-serial-runner --save-dev

设置jest来使用它,例如在jest.config.js中:

module.exports = {
   ...,
   runner: 'jest-serial-runner'
};

您可以使用项目特性将其仅应用于测试的一个子集。看到https://jestjs.io/docs/en/configuration projects-arraystring——projectconfig

其他回答

使用串行测试运行器:

npm install jest-serial-runner --save-dev

设置jest来使用它,例如在jest.config.js中:

module.exports = {
   ...,
   runner: 'jest-serial-runner'
};

您可以使用项目特性将其仅应用于测试的一个子集。看到https://jestjs.io/docs/en/configuration projects-arraystring——projectconfig

来自Jest文档:

Jest在执行之前执行测试文件中的所有描述处理程序 任何实际的测试。这是另一个建立和的原因 在*和*处理程序之前和之后拆除,而不是在 描述模块。

一旦描述块完成,默认情况下 Jest按顺序连续运行所有测试 遇到在收集阶段,等待每一个完成和被 在继续前进之前整理一下。

看看这个笑话网站给出的例子。

CLI选项有文档记录,也可以通过运行命令jest——help来访问。

你会看到你正在寻找的选项:——runInBand。

我仍在熟悉Jest,但似乎描述块是同步运行的,而测试块是异步运行的。我在一个外部描述中运行多个描述块,看起来像这样:

describe
    describe
        test1
        test2

    describe
        test3

在这种情况下,test3直到test2完成才运行,因为test3位于包含test2的描述块之后的描述块中。

如果你是Jest的新手,正在寻找一个完整的,循序渐进的例子,如何让一个特定的测试文件总是在第一个或最后一个运行,下面是:

在你想要的任何路径上创建一个名为“testSequencer.js”的文件。 将下面的代码粘贴到该文件中。

const TestSequencer = require('@jest/test-sequencer').default;
const path = require('path');

class CustomSequencer extends TestSequencer {
    sort(tests) {
        const target_test_path = path.join(__dirname, 'target.test.js');

        const target_test_index = tests.findIndex(t => t.path === target_test_path);

        if (target_test_index == -1) {
            return tests;
        }

        const target_test = tests[target_test_index];

        const ordered_tests = tests;

        ordered_tests.splice(target_test_index, 1);
        ordered_tests.push(target_test); // adds to the tail
        // ordered_tests.unshift(target_test); // adds to the head

        return ordered_tests;
    }
}

module.exports = CustomSequencer;

将“maxWorkers”选项设置为“true”。Json笑话配置。另外,将“testSequencer”选项设置为新创建的“testSequencer.js”文件的路径。

{
  "name": "myApp",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js",
    "test": "jest"
  },
  "author": "Company",
  "license": "MIT",
  "dependencies": {
    ...
  },
  "devDependencies": {
    "jest": "^27.5.1",
    ...
  },
  "jest": {
    "testSequencer": "./testSequencer.js",
    "maxWorkers": 1
  }
}

运行npm test并观察每个测试文件将在每个测试完成后逐个运行。你牺牲了一些时间,但你这样做保证了订单。

额外的好处:你还可以按字母顺序、文件夹名等顺序排列测试文件。只需根据自己的喜好修改“testsequcer .js”文件,并返回一个与“tests”数组格式相同的数组,该数组是主“sort”函数的参数,这样就可以了。