5

我有用 ES6 编写的 Node 代码,我通过发出mocha --harmony. 测试很好 - 一切正常。

现在我想将覆盖率和伊斯坦布尔添加到组合中,但在遇到的第一个箭头函数上我不断收到错误:

No coverage information was collected, exit without writing coverage information
c:\Users\Guy\Code\alpha-dev\tests\helpers.js:12
    setTimeout(() => {
                ^
SyntaxError: Unexpected token )
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Module._extensions..js (module.js:478:10)
    at Object.Module._extensions..js (c:\Users\Guy\Code\alpha-dev\node_modules\istanbul\lib\hook.js:101:13)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)

这是我尝试过的:

  1. 安装了 istanbul-harmony(来自 git://github.com/gotwarlost/istanbul.git#harmony)作为我的开发依赖项。
  2. 运行以下命令:"./node_modules/.bin/istanbul" cover "./node_modules/mocha/bin/_mocha" -- --harmony tests -R spec
  3. 伊斯坦布尔和 _mocha 的标志组合

如何运行 istanbul 以涵盖使用 ES6 功能编写的测试?我错过了什么?

4

2 回答 2

4

2016 年 7 月

以下是 package.json 文件的相关部分,其中包含一个有效的“npm cover”命令,该命令被证明对 es6 模块代码(即包括 es6importexport)、babel 6、istanbul-1.0-alpha.2 很有用

我发布这个是因为我不得不花费几个小时从其他人​​的 github 问题线程(现在我找不到)上找到一个解决方案。似乎有很多“解决方案”不再解决覆盖问题或无法轻松适应其他 devDependencies 堆栈。YMMV。

package.json 脚本

 "scripts": {
    "clean": "rm -rf ./build ./doc ; mkdir ./build",
    "build": "node_modules/.bin/babel build src/index.js -o build/index.js",
    "doc": "node_modules/.bin/esdoc -c esdoc.json",
    "lint": "node_modules/.bin/eslint src/index.js",
    "lint-test": "node_modules/.bin/eslint test/index.js",
    "test": "node_modules/.bin/mocha --compilers js:babel-core/register --reporter spec --slow 50 --timeout 60000",
    "cover": "node_modules/.bin/istanbul cover node_modules/.bin/_mocha -- -u exports --compilers js:babel-register --timeout 60000",
    "go": "npm run clean && npm run lint && npm run lint-test && npm run test && npm run build"
  },

package.json devDependencies

 "devDependencies": {
    "babel": "^6.5.2",
    "babel-cli": "^6.10.1",
    "babel-core": "^6.10.4",
    "babel-preset-es2015": "^6.9.0",
    "coveralls": "^2.11.9",
    "esdoc": "^0.4.7",
    "eslint": "^3.0.1",
    "istanbul": "^1.0.0-alpha.2",
    "mocha": "^2.5.3",
    "should": "^8.3.1"
  },

.babelrc

{
  "presets": ["es2015"]
}

.travis.yml

language: node_js

node_js:
  - 6

install:
  - npm install

script:
  - npm run lint
  - npm run lint-test
  - npm run cover

after_script: 
  - "cat coverage/lcov.info | node_modules/coveralls/bin/coveralls.js"
于 2016-07-09T03:54:00.680 回答
2

刚刚被 LinkedIn Node.JS 小组的一个乐于助人的人解决了这个问题。命令行应该是:

node --harmony ./node_modules/istanbul-harmony/lib/cli.js cover --hook-run-in-context ./node_modules/mocha/bin/_mocha -- --R spec --U exports tests

虽然这很麻烦,但您可以将其放在package.json脚本部分,然后从命令行运行npm run cover

于 2015-06-01T17:10:51.440 回答