开玩笑的覆盖范围monorepo 内项目的目录配置

问题描述 投票:0回答:2

我有一个带有玩笑的打字稿 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 中的每个项目指定不同的覆盖目录吗?

jestjs monorepo
2个回答
1
投票

如果您分别为每个产品运行 jest,则只能为每个项目指定不同的覆盖目录。如果您使用全局配置(monorepo 根目录下的 jest.config.js),则相同的覆盖率设置将应用于所有配置,包括覆盖率输出目录。


0
投票

我对 [电子邮件受保护] 进行了一些实验,我的经历与您相同:仅考虑全局

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}`,
}

有了这个,您可以运行这三个脚本中的任何一个,它将填充您想要的覆盖目录。这感觉像是一种反模式,但这是我发现一次运行一个项目并将结果转到不同目录的唯一方法。

© www.soinside.com 2019 - 2024. All rights reserved.