Jest在文档中指出:"Jest虚拟化JavaScript环境并在工作进程之间并行运行测试."
但是一个文件中的多个测试怎么样,它们是并行运行还是这个语句只适用于测试文件?我可以假设一个文件中的测试按照外观和串行顺序运行吗?
Ben*_*ing 26
2020 年的笑话
为了添加更多关于此的信息,async测试在语句内连续运行describe()。这对于 IO/数据库设置和清理功能很有用。看看下面的例子:
some.spec.js
describe("my asynchronous tests", () => {
beforeEach(async () => {
console.log('> setup test')
// SOMETHING ASYNCHRONOUS
});
afterEach(async () => {
console.log('< teardown test')
// SOMETHING ASYNCHRONOUS
});
test("test 1", async () => {
console.log('-- starting test 1');
// SOMETHING ASYNCHRONOUS
console.log('-- finished test 1');
}, 100000);
test("test 2", async () => {
console.log('-- starting test 2');
// SOMETHING ASYNCHRONOUS
console.log('-- finished test 2');
}, 100000);
});
Run Code Online (Sandbox Code Playgroud)
输出:
> setup test
-- starting test 1
-- finished test 1
< teardown test
> setup test
-- starting test 2
-- finished test 2
< teardown test
Run Code Online (Sandbox Code Playgroud)
多个describe()语句将并行执行,即使它们在同一个文件中。
ris*_*ott 23
是的,您可以放心地假设单个文件中的测试将按照外观顺序运行.您可以通过console.log在每个it块中放置一个来证明这一点.
值得一提的是,依赖执行顺序/外部状态通常是不好的做法...而你永远不会知道,Jest(或当前的底层测试运行器,Jasmine)可能决定在较新的时候以随机顺序运行它们版.
Art*_*sun 18
请注意,如果并行运行的两个测试其中一个在5 秒后超时,则可能会产生副作用- jest 停止等待超时测试,但它的代码继续执行,与以下测试 jest 并行运行。
(在我意识到这就是导致我来到这里的副作用的原因之前拔出了相当多的头发)
Ali*_*i80 10
要使测试文件按顺序运行,请使用-i或--runInBand标记
jest --runInBand
Run Code Online (Sandbox Code Playgroud)
参考:笑话文档
奇怪的是,在我的 M1 Mac 上按顺序运行测试完成得更快!,更好地测试您的用例
test.concurrent('test run concurrently', () => { ... })如果要在一个文件中并行运行它们太慢,则可以使用。它有点错误并且没有很好的记录,但至少有一种方法。
我注意到的一件事是它不会等待里面的async东西,beforeAll()所以你需要一些你自己的技巧(比如setInterval等待)来让它按预期工作。
| 归档时间: |
|
| 查看次数: |
9997 次 |
| 最近记录: |