运行摩卡+伊斯坦布尔+巴别
摩卡和巴贝尔编译器运行伊斯坦布尔时,我有一些问题..
我所有的testing都运行得很好,但是在完成所有的testing之后,它向我显示了这个信息:
No coverage information was collected, exit without writing coverage information
并没有产生任何报道报道..
我正在运行的命令是:
NODE_ENV=test istanbul cover _mocha -- --require babel-core/register --recursive
该项目是在github托pipe: https : //github.com/weslleyaraujo/react-flux-puzzle/tree/feat/unit-tests-24
任何想法可能是什么?
使用Babel 6.x,比方说我们有文件test/pad.spec.js
:
import pad from '../src/assets/js/helpers/pad'; import assert from 'assert'; describe('pad', () => { it('should pad a string', () => { assert.equal(pad('foo', 4), '0foo'); }); });
安装一堆废话:
$ npm install babel-istanbul babel-cli babel-preset-es2015 mocha
创build一个.babelrc
:
{ "presets": ["es2015"] }
运行testing:
$ node_modules/.bin/babel-node node_modules/.bin/babel-istanbul cover \ node_modules/.bin/_mocha -- test/pad.spec.js pad ✓ should pad a string 1 passing (8ms) ============================================================================= Writing coverage object [/Volumes/alien/projects/forked/react-flux-puzzle/coverage/coverage.json] Writing coverage reports at [/Volumes/alien/projects/forked/react-flux-puzzle/coverage] ============================================================================= =============================== Coverage summary =============================== Statements : 100% ( 4/4 ) Branches : 66.67% ( 4/6 ), 1 ignored Functions : 100% ( 1/1 ) Lines : 100% ( 3/3 ) ================================================================================
更新 :我已经成功地使用nyc
(消耗istanbul
),而不是istanbul
/ babel-istanbul
。 这稍微复杂一些。 尝试一下:
安装东西(你可以删除babel-istanbul
和babel-cli
):
$ npm install babel-core babel-preset-es2015 mocha nyc
像上面那样创build.babelrc
。
执行此操作:
$ node_modules/.bin/nyc --require babel-core/register node_modules/.bin/mocha \ test/pad.spec.js
…应该给你类似的结果。 默认情况下,它将覆盖信息放入.nyc-output/
,并在控制台中输出一个漂亮的文本摘要。
注意:将命令放入package.json
的scripts
字段中时,可以从这些命令中删除node_modules/.bin/
。
PS:我现在build议使用单一的笑话,而不是摩卡/ instanbul / nyc /柴/等。
解答A:使用nyc和babel-plugin-istanbul
安装程序(不要忘记 : @next
for nyc
)
npm install --save-dev nyc babel-plugin-istanbul babel-register
添加一个env到babel
config:
{ "env": { "nyc": { "plugins": ["istanbul"] } } }
nyc
configuration:
{ "reporter" : ["text", "text-summary", "lcov", "html"], "include" : ["src/**/*.js"], "require" : ["babel-register"], "sourceMap" : false, "instrument" : false, "all" : true }
PS: include
字段需要在package.json
中的.nycrc
中指定,如果在命令行中指定,则覆盖将不起作用
运行testing:
# 1. Build NODE_ENV=nyc babel src --out-dir lib # 2. Coverage nyc mocha
解决schemeB:没有额外的软件包:只有基本的软件包
最近在伊斯坦布尔( 1.0.0-alpha.2 )上完成了工作,以支持Babel生成的带有源图的代码(参见#212和这个例子)。
有两种方法:
- A.testing是针对以前编译的代码编写的
- B.针对原始代码编写的testing,并在运行时在内存中一起传输
B1。 testing导出(以前)转码的代码
这是分两步完成的:首先,用babel(例如从./src到./out)构build你的源代码,然后写入你的testing代码( export foo from "./out/foo";
) export foo from "./out/foo";
。
然后你将能够使用伊斯坦布尔1.0.0-alpha.2运行testing:
istanbul cover _mocha -- ./test --compilers js:babel-register
现在,如果您希望代码覆盖率遵循您编写的原始代码(而不是编译的代码),请确保使用设置为以下两者的 babel源地图选项进行构build:
babel ./src --out-dir ./out --source-maps both
PS:如果需要,你也可以这样做:
istanbul cover _mocha -- ./test --compilers js:babel-register \ --require babel-polyfill \ --require should \ --require sinon
B2。 直接导出原始代码的testing
在这种情况下,您可以针对原始源代码( export foo from "./src/foo";
编写testing,并且无需进一步操作,就可以使用babel-node针对cli.js直接运行istanbul 1.0.0- alpha.2:
babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test
PS:如果需要,你也可以这样做:
babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test --require babel-polyfill \ --require should \ --require sinon
截至目前17.4.2016这个覆盖面报告的东西还是有点混乱,与我的React项目有.jsx文件和帮助文件覆盖报告脚本如下所示:
istanbul cover node_modules/mocha/bin/_mocha -- \ --compilers js:babel-core/register \ --require ./test/testhelper.js \ \"test/**/*@(.js|.jsx)\"
所以现在的伊斯坦布尔版本0.4.3并不是太容易,所以你不得不使用实验性的alpha版本:
npm install istanbul@1.0.0-alpha.2 --save-dev
然后你需要.istanbul.yml
文件,以便伊斯坦布尔用这些行识别.jsx文件:
instrumentation: root: . extensions: ['.js', '.jsx']
现在它应该工作。 如果您想要增加Travis和Coveralls的覆盖面报告function,您也应该这么做:
- 在https://coveralls.io中启用该项目;
- 添加工作服
npm i coveralls --save-dev
-
将此添加到您的
.travis.yml
:script: - npm --silent test - cat ./c coverage/lcov.info | coveralls
现在你可以把这个很酷的徽章放到你的自述文件中。 NEATO!