Использование Istanbul и Mocha для покрытия кода ES6
у меня есть код узла, написанный в ES6, который я тестирую, выдавая mocha --harmony
.
Тесты в порядке - все работает.
Теперь я хочу добавить покрытие и Стамбул в микс, но я продолжаю получать ошибки в первой функции стрелки:
No coverage information was collected, exit without writing coverage information
c:UsersGuyCodealpha-devtestshelpers.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:UsersGuyCodealpha-devnode_modulesistanbullibhook.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)
вот что я пробовал:
- установлен Стамбул-гармония (от git: / / github.com/gotwarlost / istanbul.git#harmony) как моя зависимость от dev.
- выполнение следующей команды:
"./node_modules/.bin/istanbul" cover "./node_modules/mocha/bin/_mocha" -- --harmony tests -R spec
- комбинации на флагах для Стамбула и _mocha
как я могу запустить istanbul для покрытия тестов, написанных с использованием функций ES6? Что я упускаю?
2 ответов
июля 2016
вот соответствующие части пакета.файл json с рабочей командой "npm cover", которая оказывается полезной с кодом модуля es6 (т. е. включая es6 import
и export
), babel 6, istanbul-1.0-alpha.2
я публикую это, потому что мне пришлось потратить несколько часов на решение из чужого потока GitHub (который теперь я не могу найти). Кажется, есть много "решений", которые больше не решают проблему покрытия или не могут быть легко адаптируется к другим стекам devDependencies. YMMV.
.сценариев 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"
},
.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"]
}
.Трэвис.в формате 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"
только что получил это olved полезным парнем на узле LinkedIn.JS group. Командная строка должна быть:
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
из командной строки.