gpt4 book ai didi

typescript - 纽约市( Istanbul 尔)从覆盖率报告中排除测试代码

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:45 24 4
gpt4 key购买 nike

我正在尝试将覆盖率报告生成添加到 typescript 库项目中。

布局包括这些目录:

project
├─ src
│ ├─ lib ## project code (typescript), *.tsx
│ ├─ test ## test specs (typescript), *.spec.tsx
│ └─ @types ## types I made for a few dependencies that didn't have them
└─ build
├─ lib ## compiled project code (ES5 + type info, with inline sourcemaps), *.js and *.d.ts
└─ test ## compiled test specs (ES5 + type info, with inline sourcemaps), *.spec.js and *.spec.d.ts

我在 package.json 中有一个测试脚本似乎可以正常工作:

    "test": "mocha --reporter mocha-multi --reporter-options mocha-multi=mocha-multi.json --recursive build/test/**/*.spec.js",

(它产生了1413行输出;目前所有测试都通过了)

我正在尝试弄清楚如何运行 nyc 以便

  1. 运行test中的所有测试
  2. test 中的文件均未包含在覆盖率报告中
  3. lib 中的所有代码文件都包含在覆盖率报告中
  4. lib 中没有类型信息文件包含在覆盖率报告中

我想我通过这个命令获得了第一名:

npx nyc mocha --cache --reporter nyan build/test

它有这样的输出:

 872 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_,------,
0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_| /\_/\
0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-^|__( ^ .^)
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- "" ""

872 passing (20s)

---------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---------------------|----------|----------|----------|----------|-------------------|
All files | 88.97 | 91.49 | 84.09 | 89.11 | |
lib | 88.51 | 91.49 | 83.33 | 88.62 | |
Awaitable.tsx | 88.51 | 91.49 | 83.33 | 88.62 |... 79,405,419,420 |
test | 100 | 100 | 100 | 100 | |
Abortable.spec.tsx | 100 | 100 | 100 | 100 | |
Awaitable.spec.tsx | 100 | 100 | 100 | 100 | |
---------------------|----------|----------|----------|----------|-------------------|

(但更丰富多彩;我正在使用 --reporter nyan 因为我不想重复测试脚本的 1413 行输出)

该输出未达到目标 2 和 3;这个问题是关于目标 2 的:

我如何告诉 nyc 从覆盖率报告中排除 test

(报告错误也让我很困扰——没有涵盖其他测试的测试——但这不是这个问题的问题。)

我已经尝试在命令中添加各种包含和排除,但都没有影响输出:

  • -x 构建/测试
  • -x '**/*.spec.js'
  • -x '**/*.spec.tsx'
  • -x '构建/测试/**'
  • -x 测试
  • -x '构建/测试/**/*.spec.js'
  • -x '构建/测试/**/*.spec.tsx'
  • -x '测试/**'
  • -x '测试/**/*.spec.js'
  • -x '测试/**/*.spec.tsx'
  • -n 库
  • -n 构建/lib
  • -n 源/lib
  • -x 构建/lib
  • -x 库
  • -x 源/库
  • -X测试
  • -X 构建/测试
  • -X 源/测试

(如您所见,我不确定这些文件的 basedir 是什么;我没想到会在报告中看到源文件名,但 nyc 显然正在使用srcbuild 但都没有显示在报告中。)

我在阅读 this answer 后尝试了包含选项,但没有帮助。在为 lib 添加 excludes 并没有看到任何效果后,我的印象是 exclude 选项不起作用。我不会按照 this answer 中的建议切换到 ES6直到和我一起工作的人都还支持 IE。

最佳答案

在达到 100% 的测试覆盖率并希望 nyc check-coverage --branches 100 --functions 100 --lines 100 --statements 100 通过后再次查看这个我发现 this answer :

Right, after some digging I've managed to get this working. I've added

"nyc": {
"include": "app", - only looks in the app folder
"exclude": "**/*.spec.js"
}

to my package.json.

这让我想到了我的这个可行的解决方案:

"nyc": {
"include": [ "build/lib/**/*.js" ],
"exclude": [ "build/test/**/*.spec.js", "build/testlib/**/*.js" ]
}

(在我添加的路径 src/teSTLibbuild/teSTLib 之间,包含仅在测试中使用的助手,它们不应作为测试运行,并且应该被排除来自测试覆盖率报告。)

关于typescript - 纽约市( Istanbul 尔)从覆盖率报告中排除测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com