Mochaとbabelコンパイラでistanbulを実行しているときに問題が発生します。
私のテストはすべて正常に実行されていますが、すべてのテストが完了した後、次のメッセージが表示されます。
No coverage information was collected, exit without writing coverage information
また、カバレッジレポートを作成していません。
Imが実行しているコマンドは次のとおりです。
NODE_ENV=test istanbul cover _mocha -- --require babel-core/register --recursive
プロジェクトはgithubでホストされています: 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
.babelrc
を作成します。
{
"presets": ["es2015"]
}
テストを実行します。
$ 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 )
================================================================================
[〜#〜] update [〜#〜]:nyc
/の代わりにistanbul
(istanbul
を消費する)を使用して成功しましたbabel-istanbul
。これはやや複雑ではありません。試すには:
ものをインストールします(babel-istanbul
およびbabel-cli
を削除できます):
$ npm install babel-core babel-preset-es2015 mocha nyc
上記のように.babelrc
を作成します。
これを実行します:
$ node_modules/.bin/nyc --require babel-core/register node_modules/.bin/mocha \
test/pad.spec.js
...同様の結果が得られます。デフォルトでは、カバレッジ情報を.nyc-output/
に入れ、コンソールにNiceテキストの要約を出力します。
注:node_modules/.bin/
のscripts
フィールドにコマンドを配置する場合、これらのコマンドからpackage.json
を削除できます。 。
PS:mocha/instanbul/nyc/chai/etcの代わりに、単一の jest を使用することをお勧めします。
セットアップ (:nyc
の@next
を忘れないでください)
npm install --save-dev nyc babel-plugin-istanbul babel-register
babel
configにenvを追加します:
{
"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
フィールドは、.nycrc
のpackage.json
で指定する必要があります。コマンドラインで指定した場合、カバレッジは機能しません
テストの実行:
# 1. Build
NODE_ENV=nyc babel src --out-dir lib
# 2. Coverage
nyc mocha
最近、イスタンブールで作業が行われました( 1.0.0-alpha.2 )。ソースマップを使用してBabelで生成されたコードをサポートします( #212 および this を参照)例)。
2つの方法があります。
これは2つのステップで行われます。まず、ソースをbabelでビルドし(例えば、。/ srcから./outに)、テストされたソース(export foo from "./out/foo";
)に対してテストを記述します。
その後、istanbul 1.0.0-alpha.2 を使用してテストを実行できます。
istanbul cover _mocha -- ./test --compilers js:babel-register
これで、コードカバレッジを(トランスコードされたコードではなく)作成した元のコードに従う場合は、 babel source-maps options を both に設定してビルドしてください:
babel ./src --out-dir ./out --source-maps both
PS:必要に応じて、次のこともできます。
istanbul cover _mocha -- ./test --compilers js:babel-register \
--require babel-polyfill \
--require should \
--require sinon
この場合、元のソース(export foo from "./src/foo";
)に対してテストを記述し、それ以上の手順を行わずに、直接istanbul 1.0.0-alpha.2 を使用してcli.jsに対してbabel-nodeを実行します:
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の時点で、このカバレッジレポートはいささか厄介であり、.jsxファイルとヘルパーファイルを持つReactプロジェクトでは、カバレッジレポートスクリプトは次のようになります。
istanbul cover node_modules/mocha/bin/_mocha -- \
--compilers js:babel-core/register \
--require ./test/testhelper.js \
\"test/**/*@(.js|.jsx)\"
したがって、イスタンブールの現在のバージョン0.4.3はBabelで動作しないため、実験的なアルファバージョンを使用する必要があります。
npm install [email protected] --save-dev
次に、.istanbul.yml
-fileが必要です。これにより、Istanbulはこれらの行で.jsxファイルを認識します。
instrumentation:
root: .
extensions: ['.js', '.jsx']
そして今、それは動作するはずです。また、TravisとCoverallsのカバレッジレポートを追加する場合の小さなボーナスとして、次のことを行う必要があります。
npm i coveralls --save-dev
これを.travis.yml
に追加します:
script:
- npm --silent test
- cat ./c
coverage/lcov.info | coveralls
そして今、あなたはあなたのREADMEにそのクールなバッジを置くことができます。ネイト!