我有一个带有玩笑的打字稿 monorepo。他们的
jest.config.js
是
module.exports = {
clearMocks: true,
projects: ['<rootDir>/packages/**/jest.config.js'],
collectCoverage: true,
coverageReporters: [
"text-summary",
"lcov",
],
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['*.spec.ts', '*.spec.tsx']
}
在
server
包中,我使用 创建
jest.config.js
const { name } = require('./package.json');
module.exports = {
displayName: name,
name,
'transform': {
'^.+\\.ts$': 'ts-jest'
},
collectCoverageFrom: [
'<rootDir>/src/**/*.ts'
],
coverageDirectory: '<rootDir>/packages/server/src/tests/coverage',
}
但是当我运行 jest 时,它会在我的 monorepo 的根目录下创建
coverage
目录。
我只是尝试使用
coverageDirectory: '<rootDir>/src/tests/coverage',
、coverageDirectory: 'src/tests/coverage',
和coverageDirectory: [__dirname, 'src', 'tests', 'coverage'].join('/'),
但没有成功。
我可以更改覆盖目录路径的唯一方法是在 monorepo 的
jest.config.js
处指定它,但这样我无法为每个项目指定覆盖目录。
有人知道如何为 monorepo 中的每个项目指定不同的覆盖目录吗?
如果您分别为每个产品运行 jest,则只能为每个项目指定不同的覆盖目录。如果您使用全局配置(monorepo 根目录下的 jest.config.js),则相同的覆盖率设置将应用于所有配置,包括覆盖率输出目录。
我对 [电子邮件受保护] 进行了一些实验,我的经历与您相同:仅考虑全局
jest.config.js
的 coverageDirectory
。无论我对全局配置做了什么,在项目配置中覆盖它都没有什么区别。
在一次运行一个测试项目时,我找不到一种方法来完成这项工作。一个项目会覆盖另一个项目。我不确定我们打算如何使用此功能,但对我有用的是使用环境变量在每个命令的基础上覆盖全局
coverageDirectory
路径。
在
package.json
:
"test:all": "jest",
"test:package-a": "COVERAGE_DIR=coverage/package-a jest --selectProjects PackageA",
"test:package-b": "COVERAGE_DIR=coverage/package-b jest --selectProjects PackageB",
在
jest.config.js
:
const coverageDir = process.env.COVERAGE_DIR || 'coverage/unified';
module.exports = {
coverageDirectory: `<rootDir>${coverageDir}`,
}
有了这个,您可以运行这三个脚本中的任何一个,它将填充您想要的覆盖目录。这感觉像是一种反模式,但这是我发现一次运行一个项目并将结果转到不同目录的唯一方法。