纽约市(伊斯坦布尔)从覆盖率报告中排除测试代码
nyc (istanbul) exclude test code from coverage reports
我正在尝试将覆盖率报告生成添加到打字稿库项目中。
布局包括这些目录:
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
中没有类型信息文件包含在覆盖率报告中
我想我通过这个命令获得了第一名:
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
?
(报告错误也让我很困扰 - 没有涵盖其他测试的测试 - 但这不是这个问题的问题。)
我尝试在命令中添加各种包含和排除,none 其中影响了输出:
- -x build/test
- -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 库
- -nbuild/lib
- -nsrc/lib
- -x build/lib
- -x 库
- -x src/lib
- -X测试
- -X build/test
- -X src/test
(如您所见,我不确定这些文件的 basedir 是什么;我没想到会在报告中看到源文件名,但 nyc
显然对两者都做了一些事情src
和 build
但报告中均未显示。)
我在阅读 , and it didn't help. After adding excludes for lib and seeing no effect, I'm getting the impression that the exclude option just doesn't work. I won't switch to ES6 as suggested in 后尝试了 include 选项,直到没有人与我一起工作仍然支持 IE。
在达到 100% 测试覆盖率并希望 nyc check-coverage --branches 100 --functions 100 --lines 100 --statements 100
通过后再次查看此文件,我发现 :
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/testlib
和 build/testlib
之间,包含仅在测试中使用的助手,不应 运行 作为测试,并且应从测试覆盖率报告中排除.)
我正在尝试将覆盖率报告生成添加到打字稿库项目中。
布局包括这些目录:
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
中没有类型信息文件包含在覆盖率报告中
我想我通过这个命令获得了第一名:
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
?
(报告错误也让我很困扰 - 没有涵盖其他测试的测试 - 但这不是这个问题的问题。)
我尝试在命令中添加各种包含和排除,none 其中影响了输出:
- -x build/test
- -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 库
- -nbuild/lib
- -nsrc/lib
- -x build/lib
- -x 库
- -x src/lib
- -X测试
- -X build/test
- -X src/test
(如您所见,我不确定这些文件的 basedir 是什么;我没想到会在报告中看到源文件名,但 nyc
显然对两者都做了一些事情src
和 build
但报告中均未显示。)
我在阅读
在达到 100% 测试覆盖率并希望 nyc check-coverage --branches 100 --functions 100 --lines 100 --statements 100
通过后再次查看此文件,我发现
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/testlib
和 build/testlib
之间,包含仅在测试中使用的助手,不应 运行 作为测试,并且应从测试覆盖率报告中排除.)