Jest测试文件未按预期顺序执行,如何配置实现固定执行顺序?
问题原因
Jest默认不会按文件名中的数字序号自动排序测试文件,你之前用到的--runInBand/-i参数仅能保证测试串行执行,不会干预文件的执行排序逻辑,因此需要额外配置排序规则实现需求。
解决方案
方案1:自定义测试序列器(适合测试文件较多/后续会新增测试的场景)
该方案可以适配所有带数字序号的测试文件,后续新增Test5.test.js等文件也无需修改配置。
- 项目根目录新建
custom-test-sequencer.js文件,写入以下代码:
const Sequencer = require('@jest/test-sequencer').default; class CustomSequencer extends Sequencer { sort(tests) { // 提取文件名中的数字按从小到大排序 return tests.sort((a, b) => { const numA = parseInt(a.path.match(/Test(\d+)\.test\.js/)[1], 10); const numB = parseInt(b.path.match(/Test(\d+)\.test\.js/)[1], 10); return numA - numB; }); } } module.exports = CustomSequencer;
- 修改
jest.config.js,新增testSequencer配置项指向该文件:
'use strict'; module.exports = { testMatch: [ '**/integration/*.test.js' ], // 新增此行配置 testSequencer: './custom-test-sequencer.js' };
- 保留原
package.json中的test命令不变,重新执行npm test即可看到测试按预期顺序执行。
方案2:直接指定测试文件(适合测试文件数量少的场景)
无需新增文件,直接修改package.json的执行命令,按预期顺序传入测试文件路径即可:
{ "scripts": { "test": "jest tests/integration/Test1.test.js tests/integration/Test2.test.js tests/integration/Test3.test.js tests/integration/Test4.test.js -i" } }
内容的提问来源于stack exchange,提问作者Dave Brady
相关产品推荐
相关产品推荐

