如何在Jest中分别运行Lint检查与常规测试?
解决方案:分别运行Jest配置中的常规测试与Lint测试
我之前也碰到过一模一样的问题——把常规测试和jest-runner-eslint的Lint测试放在Jest配置的projects数组里后,想单独跑其中一组却找不到正确的方式,用--projects参数还触发了monorepo模式报错。后来研究了Jest的文档和社区方案,找到了两个靠谱的解决办法:
方法1:用--selectProjects指定要运行的项目(推荐)
Jest 24及以上版本支持--selectProjects标志,它专门用来筛选你在配置projects数组里定义的项目,完全不会触发monorepo的逻辑。具体步骤如下:
给每个子项目配置添加
displayName
把你的两个测试配置拆成单独的文件(或者在主配置的projects数组里直接定义对象),每个配置加上唯一的displayName:比如主配置
jest.config.js:module.exports = { projects: [ { displayName: 'unit-tests', // 常规测试的配置:testMatch、moduleFileExtensions等 testMatch: ['<rootDir>/src/**/*.test.js'], moduleFileExtensions: ['js', 'json'] }, { displayName: 'lint', runner: 'jest-runner-eslint', testMatch: ['<rootDir>/src/**/*.js'] // 其他ESLint runner相关配置 } ] };或者拆成两个独立配置文件:
jest.config.unit.js(常规测试):module.exports = { displayName: 'unit-tests', testMatch: ['<rootDir>/src/**/*.test.js'] };jest.config.lint.js(Lint测试):module.exports = { displayName: 'lint', runner: 'jest-runner-eslint', testMatch: ['<rootDir>/src/**/*.js'] };
主配置里引用这两个文件:
module.exports = { projects: ['./jest.config.unit.js', './jest.config.lint.js'] };用
--selectProjects运行指定项目- 只跑常规测试:
npx jest --selectProjects unit-tests - 只跑Lint测试:
npx jest --selectProjects lint
- 只跑常规测试:
方法2:直接指定单个配置文件运行
如果你的Jest版本低于24,或者不想用displayName,可以直接指定对应的配置文件来单独运行某一组测试:
- 运行常规测试:
npx jest --config jest.config.unit.js - 运行Lint测试:
npx jest --config jest.config.lint.js
为什么--projects参数会报错?
你之前用--projects出错,是因为这个参数的作用是添加额外的项目路径,而不是筛选已配置好的projects数组项。Jest会把你传入的路径当作monorepo的子包目录去扫描,自然会和你当前的配置逻辑冲突。而--selectProjects才是专门为筛选配置内的projects数组设计的参数。
内容的提问来源于stack exchange,提问作者Nathan Lincoln
相关产品推荐
相关产品推荐

