运行摩卡+伊斯坦布尔+巴别

摩卡和巴贝尔编译器运行伊斯坦布尔时,我有一些问题..

我所有的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-istanbulbabel-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.jsonscripts字段中时,可以从这些命令中删除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"] } } } 

    nycconfiguration:

     { "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,您也应该这么做:

    1. https://coveralls.io中启用该项目
    2. 添加工作服npm i coveralls --save-dev
    3. 将此添加到您的.travis.yml

       script: - npm --silent test - cat ./c coverage/lcov.info | coveralls 

    现在你可以把这个很酷的徽章放到你的自述文件中。 NEATO!