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

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


当前回答

Jest按照在收集阶段遇到的顺序连续运行所有测试

你可以利用它并创建特殊的测试文件alltests.ordered-test.js:

import './first-test'
import './second-test'
// etc.

并添加一个带有testMatch的笑话配置,它将使用该文件名运行测试。

这将按该顺序加载每个文件,从而以相同的顺序执行它们。

其他回答

这对我来说很有效,确保了模块测试的有序运行:

1)将测试保存在独立的文件中,但没有spec/test的命名。

|__testsToRunSequentially.test.js
|__tests
   |__testSuite1.js
   |__testSuite2.js
   |__index.js

2)测试套件的文件也应该是这样的(testSuite1.js):

export const testSuite1 = () => describe(/*your suite inside*/)

3)将它们导入testtorunsequential .test.js并使用——runInBand运行:

import { testSuite1, testSuite2 } from './tests'

describe('sequentially run tests', () => {
   testSuite1()
   testSuite2()
})

以防有人想在包中保留所有的笑话配置。json选项。

runInBand似乎不是一个有效的配置选项。这意味着你可以以下面的设置结束,它似乎不是100%完美的。

"scripts": {
    "test": "jest  --runInBand"
},
...
"jest": {
    "verbose": true,
    "forceExit": true,
    "preset": "ts-jest",
    "testURL": "http://localhost/",
    "testRegex": "\\.test\\.ts$",
    ...
  }
...

但是,你可以像下面这样使用maxWorkers选项添加runInBand:

  "scripts": {
        "test": "jest"
    },
    ...
    "jest": {
        "verbose": true,
        "maxWorkers": 1,
        "forceExit": true,
        "preset": "ts-jest",
        "testURL": "http://localhost/",
        "testRegex": "\\.test\\.ts$",
        ...
      }
    ...

Jest按照在收集阶段遇到的顺序连续运行所有测试

你可以利用它并创建特殊的测试文件alltests.ordered-test.js:

import './first-test'
import './second-test'
// etc.

并添加一个带有testMatch的笑话配置,它将使用该文件名运行测试。

这将按该顺序加载每个文件,从而以相同的顺序执行它们。

来自Jest文档:

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