Ric*_*ann 10 code-coverage jestjs monorepo angular nrwl-nx
我正在我的 nx Angular monorepo 的多个项目中运行测试,并且希望获得所有项目的单个代码覆盖率报告,其中所有代码文件都从测试中隐藏。测试运行似乎将分析的代码范围限制到当前的 nx 项目,并且我没有从基础库(从多个项目使用)获取覆盖率报告。这可能不是最佳实践,但我想分析哪些代码正在使用以及哪些代码可以重构/删除。
我已经尝试过一些解决策略,但没有一个能够解决我的所有问题。
我扩展了所有项目的 jest.config.js 并添加了覆盖范围和测试报告器(目前用于在 Azure DevOps 中发布/显示的 junit 和 cobertura)
笑话配置.js
module.exports = {
...
coverageReporters: ["cobertura", "html"],
...
reporters: [
"default",
["jest-junit", { outputDirectory: "coverage/libs/my-lib", outputName: "junit.xml" }]
],
collectCoverageFrom: [
"**/*.{ts,tsx}",
"!**/node_modules/**",
"!**/coverage/**",
"!**/vendor/**"
]
};
Run Code Online (Sandbox Code Playgroud)
运行所有项目
我尝试使用 nx run-many 命令运行每个应用程序和库中的所有测试。
nx run-many --all --target=test --parallel -- --collectCoverage --coverage
Run Code Online (Sandbox Code Playgroud)
我为每个测试/覆盖率报告提供了一个覆盖率文件夹,并且可能能够将它们合并到一个报告中(例如/sf/answers/4105434301/)。但并未包含所有源文件,并且覆盖运行始终仅限于一个项目(未记录多个应用程序中库代码的使用情况)。
运行全局笑话配置
第二种方法是运行全局笑话配置,直接抛出笑话。
node \"node_modules/jest/bin/jest.js\" -c \"jest.config.js\" --coverage --collectCoverage --coverageReporters=html --verbose=false
Run Code Online (Sandbox Code Playgroud)
我认为,这可能与第一种方法类似,因为 jest 也具有项目配置并独立运行每个项目。我得到一份覆盖范围和测试报告,其中包含所有结果。但也没有包含所有源文件,并且覆盖运行始终局限于一个项目(未记录多个应用程序中库代码的使用情况)。
module.exports = {
projects: getJestProjects(),
reporters: [
"default",
["jest-junit", { outputDirectory: "coverage", outputName: "junit.xml" }],
["./node_modules/jest-html-reporter", {
"pageTitle": "Test Report",
"outputPath": "coverage/test-report.html",
"includeConsoleLog": true,
"includeFailureMsg": true,
"includeSuiteFailure": true
}]
],
collectCoverageFrom: [
"**/*.{ts,tsx}",
"!**/node_modules/**",
"!**/coverage/**",
"!**/vendor/**"
]
};
Run Code Online (Sandbox Code Playgroud)
图书馆
嗯,对于我的用例来说,这是一个非常简单的黑客攻击 - 是的,在我想出这个之前我已经搜索了好几个小时。在jest.config.ts
我们的主(前端)应用程序中,我将以下内容添加到默认属性中:
projects: getJestProjects().map(
(val: unknown) => (val as string).replace('<rootDir>', '<rootDir>/../../')
),
Run Code Online (Sandbox Code Playgroud)
以及顶部相应的导入:
import { getJestProjects } from '@nrwl/jest';
Run Code Online (Sandbox Code Playgroud)
现在,每当我运行 时,它都会运行(我认为)项目nx run frontend:test
中的所有测试。workspace.json
这很棒,因为我们在应用程序中只有 app.component - 其他所有内容都在libs文件夹中。添加--codeCoverage
到此运行效果很好。
前端依赖的libs文件夹中的所有组件实际上都在libs/frontend中——所以一旦另一个应用程序进入这个 monorepo,我将只过滤带有或其他内容的项目。{app,lib}/frontend/
归档时间: |
|
查看次数: |
12168 次 |
最近记录: |