纽约市(伊斯坦布尔)从覆盖率报告中排除测试代码

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 以便

  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

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

我尝试在命令中添加各种包含和排除,none 其中影响了输出:

(如您所见,我不确定这些文件的 basedir 是什么;我没想到会在报告中看到源文件名,但 nyc 显然对两者都做了一些事情srcbuild 但报告中均未显示。)

我在阅读 , 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/testlibbuild/testlib 之间,包含仅在测试中使用的助手,不应 运行 作为测试,并且应从测试覆盖率报告中排除.)