我正在通过npm测试运行Jest测试。Jest默认情况下并行运行测试。是否有办法使测试按顺序运行?
我有一些测试调用依赖于更改当前工作目录的第三方代码。
我正在通过npm测试运行Jest测试。Jest默认情况下并行运行测试。是否有办法使测试按顺序运行?
我有一些测试调用依赖于更改当前工作目录的第三方代码。
当前回答
我仍在熟悉Jest,但似乎描述块是同步运行的,而测试块是异步运行的。我在一个外部描述中运行多个描述块,看起来像这样:
describe
describe
test1
test2
describe
test3
在这种情况下,test3直到test2完成才运行,因为test3位于包含test2的描述块之后的描述块中。
其他回答
我仍在熟悉Jest,但似乎描述块是同步运行的,而测试块是异步运行的。我在一个外部描述中运行多个描述块,看起来像这样:
describe
describe
test1
test2
describe
test3
在这种情况下,test3直到test2完成才运行,因为test3位于包含test2的描述块之后的描述块中。
Jest按照在收集阶段遇到的顺序连续运行所有测试
你可以利用它并创建特殊的测试文件alltests.ordered-test.js:
import './first-test'
import './second-test'
// etc.
并添加一个带有testMatch的笑话配置,它将使用该文件名运行测试。
这将按该顺序加载每个文件,从而以相同的顺序执行它们。
以防有人想在包中保留所有的笑话配置。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$",
...
}
...
这对我来说很有效,确保了模块测试的有序运行:
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()
})
CLI选项有文档记录,也可以通过运行命令jest——help来访问。
你会看到你正在寻找的选项:——runInBand。