Running Mocha + Istanbul + Babel

后端 未结 3 1787
暗喜
暗喜 2020-12-07 16:54

I\'m having some issues while running istanbul with mocha and the babel compiler..

all my tests are runnning just fine, but after all the tests done it shows me this

3条回答
  •  佛祖请我去吃肉
    2020-12-07 17:02


    PS: I now recommend to use single jest instead of mocha/instanbul/nyc/chai/etc.


    Solution A: Using nyc and babel-plugin-istanbul

    Setup (don't forget @next for nyc):

    npm install --save-dev nyc babel-plugin-istanbul babel-register
    

    Add an env to babel config:

    {
      "env": {
        "nyc": { "plugins": ["istanbul"] }
      }
    }
    

    nyc config:

    {
      "reporter"   : ["text", "text-summary", "lcov", "html"],
      "include"    : ["src/**/*.js"],
      "require"    : ["babel-register"],
      "sourceMap"  : false,
      "instrument" : false,
      "all"        : true
    }
    

    PS: include field needs to be specified in .nycrc of in package.json, if specified in command line, coverage will not works

    Running the tests:

    # 1. Build
    NODE_ENV=nyc babel src --out-dir lib
    
    # 2. Coverage
    nyc mocha
    

    Solution B: No extra packages : Only the basic ones

    Work has been done recently on istanbul (1.0.0-alpha.2) to support Babel generated code with sourcemaps (see #212 and this for an example).

    There are 2 ways:

    • A. Tests written against previously transpiled code
    • B. Tests written against original code and transpiled all together in memory at runtime


    B1. Tests that exports (previously) transpiled code

    This is done in 2 steps: Firstly, build your source with babel (e.g. from ./src to ./out) and write your tests against transpiled source (export foo from "./out/foo";).

    Then you will be able to run the tests using istanbul 1.0.0-alpha.2 :

    istanbul cover _mocha -- ./test --compilers js:babel-register 
    

    Now if you want code coverage to follow the original code you've written (not the transpiled one), make sure to build with babel source-maps options set to both :

    babel ./src --out-dir ./out --source-maps both
    

    PS: If needed you can also do :

    istanbul cover _mocha -- ./test --compilers js:babel-register \
       --require babel-polyfill \
       --require should \
       --require sinon
    


    B2. Tests that directly exports original code

    In this case you write your tests against original source (export foo from "./src/foo";), and with no further step, you directly run istanbul 1.0.0-alpha.2 using babel-node against cli.js :

    babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test
    

    PS: If needed you can also do :

    babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test
       --require babel-polyfill \
       --require should \
       --require sinon
    

提交回复
热议问题