如何依次运行Jest测试?


140

我正在通过进行Jest测试npm test。Jest默认情况下并行运行测试。有什么方法可以使测试按顺序运行?

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

Answers:


220

CLI选项已记录在案,也可以通过运行命令来访问jest --help

您会看到所需的选项:--runInBand


5
非常感谢!是npm test --runInBand吗 题外话:不确定“ band”这个名字的来源。--runSequentially可能更有意义:)
Martin Konicek '17

13
@MartinKonicek npm test -- --runInBand是正确的。
OndrejSlinták17年

40
不幸的是,无法控制执行顺序的事实使Jest在集成测试中几乎毫无用处。
Evan B.

19
@Evan您需要按特定顺序运行测试的事实是一种气味。
Nico Van Belle

18
@NicoVanBelle这仅仅是您对足够复杂的有状态系统进行真正的端到端测试所需付出的代价。我对替代品持开放态度,但是我还没有看到一种解决方案,该解决方案既不涉及天真地换掉堆栈的关键部分,又不涉及测试之间的缓慢数据库重置。这并不意味着Jest是一个不好的工具,只是针对这种特定测试的错误工具。
Evan B.

17

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

describe
    describe
        test1
        test2

    describe
        test3

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


1
也许它仍然可以并行运行。
LCB

这很棒。可以首先检查缺少环境变量的行为,然后设置变量并进行进一步测试。
阿塔克

14

它为我工作,确保按顺序运行良好分离的模块测试:

1)将测试保存在单独的文件中,但不要spec/test命名。

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

2)具有测试套件的文件也应如下所示(testSuite1.js):

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

3)将它们导入testToRunSequentially.test.js并运行--runInBand

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

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

您不需要使用--runInBand,因为您已经有两个测试套件。子测试套件按顺序执行。
RICKY KUMAR

10

使用串行测试运行器:

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

设置玩笑以使用它,例如在jest.config.js中:

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

您可以使用项目功能将其仅应用于测试的子集。参见https://jestjs.io/docs/en/configuration#projects-arraystring--projectconfig


您可以使用项目功能仅将其用于部分测试。, 怎么样?
Nux

1
@Nux Jest中的“项目”配置设置可让您有选择地将其他配置设置应用于特定的测试集。答案已更新,带有指向文档和示例的链接。
Joachim Lous

4

如从https://github.com/facebook/jest/issues/6194#issuecomment-419837314复制

test.spec.js

import { signuptests } from './signup'
import { logintests } from './login'

describe('Signup', signuptests)
describe('Login', logintests)

signup.js

export const signuptests = () => {
     it('Should have login elements', () => {});
     it('Should Signup', () => {}});
}

login.js

export const logintests = () => {
    it('Should Login', () => {}});
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.