Jest 限制集成测试的并发性

Vet*_*ack 5 jestjs

如何在玩笑中限制测试执行的并发性?假设我只想同时并行运行 4 个测试用例。

我目前的问题是我有很多使用真实数据库连接的集成测试。Jest 并行执行太多测试用例,因此经常连接超时或我的测试数据库实例的性能显着下降,因为同时有太多查询。

我所有的集成测试套件都具有以下结构:

describe('<functionality x>', () => {
    test('case 1', async () => {...})
    test('case 2', async () => {...})
    test('case 3', async () => {...})
})

describe('<functionality y>', () => {
    test('case 1', async () => {...})
    test('case 2', async () => {...})
    test('case 3', async () => {...})
})
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用 运行 jest --maxWorkers=1,但我想这与 相同--runInBand,它有效,但确实减慢了整体执行时间。

Pet*_*r W 14

相反--maxWorkers=1,您可以提供更大的值,例如--maxWorkers=2or --maxWorkers=50%

但是,如果您尝试限制并行运行的测试数量,则似乎您想要使用:

jest --maxConcurrency=N
Run Code Online (Sandbox Code Playgroud)

Jest 的文档说:

防止 Jest 同时执行超过指定数量的测试。仅影响使用 test.concurrent 的测试。

因此,请注意您必须通过添加以下内容来修改测试.concurrent

describe('<functionality x>', () => {
    test.concurrent('case 1', async () => {...})
    test.concurrent('case 2', async () => {...})
    test.concurrent('case 3', async () => {...})
})

describe('<functionality y>', () => {
    test.concurrent('case 1', async () => {...})
    test.concurrent('case 2', async () => {...})
    test.concurrent('case 3', async () => {...})
})
Run Code Online (Sandbox Code Playgroud)