babel-istanbul 覆盖从报告中排除文件但继续转译

babel-istanbul cover exclude file from report but keep to transpile

我的目标是能够在 es6 中编写 src 和测试文件,都在同一个目录中(我希望我的测试文件与我的源文件并排),并获得覆盖率报告原始文件。

此时我能想到的最好办法是使用以下命令将我的测试文件包含在覆盖率报告中:

./node_modules/.bin/babel-node node_modules/.bin/babel-istanbul \
    cover \
    node_modules/.bin/_mocha -- 'src/**/*.spec.*.js'

我确实尝试使用 cover -x 'src/**/*.spec.*.js',它还排除了转译文件,然后 mocha 无法 运行 测试。对于我的一生,我无法弄清楚如何做类似这样的事情:

./node_modules/.bin/babel-node node_modules/.bin/babel-istanbul \
  cover -x 'src/**/*.spec.*.js' \
  node_modules/.bin/_mocha -- --require babel-core/register 'src/**/*.spec.*.js'

这将 运行 我所有的测试都正常,但会给我带来负面影响:

No coverage information was collected, exit without writing coverage information

所以我离我想要的不远,我想我只是错过了最后一段,如果有人能在这里提供帮助,我将不胜感激。

此致, D.

从来没有 -x 选项来做我想做的事。如果您不介意使用 .istanbul.yml 文件,这对我有用,可以从覆盖率报告中排除并排测试...

npm run cover 命令:

babel-node node_modules/.bin/babel-istanbul cover _mocha -- --opts mocha.opts

project_dir/mocha.opts 文件:

src/**/*.test.js
--compilers js:babel-register
--require babel-polyfill

project_dir/.istanbul.yml 文件:

instrumentation:
  root: src
  include-all-sources: true
  verbose: true
  excludes: ["*.test.js"]
reporting:
  dir: "coverage"

对于后来发现这一点的人来说,具有 mocha@babelnyc 的堆栈要多得多(我说多了吗?)更容易配置。不再需要 babel-node.

package.json:

{
  ...
  "scripts": {
    "coveralls": "cat reports/coverage/lcov/info | coveralls", // <-- Used on CI
    "coverage": "nyc --report-dir=reports/coverage npm test",
    "test": "mocha \"src/**/*.test.js?(x)\""
  },
  "mocha": {
    "require": [
      "@babel/register",
      ...
    ]
  },
  ...
}

这是我的例子 .nycrc:

{
  "all": true,
  "cache": false,
  "temp-dir": "./reports/nyc_output",
  "check-coverage": false,
  "require": [
    "@babel/register"
  ],
  "exclude": [
    "dist/",
    "reports/",
    "src/**/*.test.js",
    "src/**/*.test.jsx"
  ],
  "extension": [
    ".js",
    ".jsx"
  ],
  "reporter": [
    "cobertura",
    "lcov",
    "html"
  ],
  "watermarks": {
    "statements": [50, 80],
    "lines": [50, 80],
    "functions": [50, 80],
    "branches": [50, 80]
  }
}