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



我正在尝试将覆盖范围报告的生成添加到打字稿库项目中。

布局包括以下目录:

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中没有类型的信息文件包含在覆盖范围报告中

我认为我对此命令的#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显然在使用srcbuild,但没有做任何事情在报告中显示任何一个。(

我在阅读此答案后尝试了包含选项,但这无济于事。在添加了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/testlibbuild/testlib,其中包含仅在测试中使用的帮助者,这些帮助者不应作为测试运行,并且应将其排除在测试覆盖范围报告中。(

最新更新