我正在尝试将覆盖范围报告的生成添加到打字稿库项目中。
布局包括以下目录:
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
,以便
- 运行
test
中的所有测试 -
test
中没有文件包含在"覆盖报告"中 -
lib
中的所有代码文件都包含在"覆盖范围报告"
中 -
lib
中没有类型的信息文件包含在覆盖范围报告中
我认为我对此命令的#1正确:
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'build/test/**'
- -x测试
- -x'build/test/**/*。spec.js'
- -x'build/test/**/*。spec.tsx'
- -x'test/**'
- -x'test/**/*。spec.js'
- -x'test/**/*。spec.tsx'
- -n lib
- -n构建/lib
- -n src/lib
- -x构建/lib
- -x lib
- -x src/lib
- -x测试
- -x构建/测试
- -X SRC/TEST
(如您所见,我不确定这些基础是什么;我没想到会在报告中看到源文件名,但是nyc
显然在使用src
和build
,但没有做任何事情在报告中显示任何一个。(
我在阅读此答案后尝试了包含选项,但这无济于事。在添加了lib的排除并看不到效果之后,我得到的印象是排除选项不起作用。我不会像这个答案所建议的那样切换到ES6,直到没有人使用仍然支持IE。
在达到100%测试覆盖范围并希望通过nyc check-coverage --branches 100 --functions 100 --lines 100 --statements 100
通过后再次查看此答案,我找到了这个答案:
对,经过一番挖掘,我设法使此功能正常。我添加了
"nyc": { "include": "app", - only looks in the app folder "exclude": "**/*.spec.js" }
到我的软件包.json。
,这使我在我的中找到了这个工作解决方案:
"nyc": {
"include": [ "build/lib/**/*.js" ],
"exclude": [ "build/test/**/*.spec.js", "build/testlib/**/*.js" ]
}
(在i之间添加了路径 src/testlib
和 build/testlib
,其中包含仅在测试中使用的帮助者,这些帮助者不应作为测试运行,并且应将其排除在测试覆盖范围报告中。(