6

コードを計測してカバレッジを取得して実行しようとしていますが、何かが私の指をすり抜けています。

私は次のように起動istanbulします:

node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -- -u exports -R spec

そして、私は次のようにmocha.opts見えます:

app/assets/javascripts/components/**/*-mocha.jsx
--compilers jsx:mocha/compiler.js

すべてが正常に動作しているように見えます (少なくともテストは実行されます) が、私が得た唯一のカバレッジは、JSX を JavaScript にコンパイルするために使用されるファイル (compiler.js

compiler.js                 100%
jsx-stub-transform.js       65% 

めちゃくちゃ便利…

何か案は?

4

2 に答える 2

2

次のように、 MochaispartaをBabel 6で直接使用しています。

npm test指図

BABEL_ENV=test babel-node node_modules/isparta/bin/isparta cover _mocha

.babelrc

{
    "plugins": [
        "add-module-exports",
        "transform-decorators-legacy",
        "transform-runtime"
    ],
    "presets": [
        "es2015",
        "react",
        "stage-0"
    ],
    "env": {
        "test": {
            "plugins": [
                "rewire"
            ]
        }
    }
}

test/mocha.opts

--compilers js:babel-core/register
--require test/init.js

src/**/*_test.js*

test.init.js

'use strict';

require('mock-require')('clappr');
require('testdom')('<html><body></body></html>', {
    React: 'react',
    localStorage: 'localStorage'
});

.istanbul.yml

instrumentation:
  root: src
  excludes: ['*_test.js']

から依存関係を選択package.json

"babel-cli": "^6.7.5",
"babel-core": "^6.7.2",
"babel-eslint": "^5.0.0",
"babel-loader": "^6.2.4",
"babel-plugin-add-module-exports": "^0.1.2",
"babel-plugin-rewire": "^1.0.0-rc-2",
"babel-plugin-runtime": "^1.0.7",
"babel-plugin-syntax-jsx": "^6.5.0",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-plugin-transform-runtime": "^6.6.0",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-0": "^6.5.0",
"babel-register": "^6.7.2",
"babel-runtime": "^5.8.34",
"babel-template": "^6.7.0",
"babel-types": "^6.7.2",
"isparta": "^4.0.0",
"mocha": "^2.4.5",

.JSX ファイルに関する注意

すべての .JSX ファイルの名前を .JS に変更しました。その理由は次のとおりです。

  • ホストされているカバレッジ レポートにcodecovを使用しています。これcoverage/lcov-report/index.htmlにより、正しいカバレッジが示されている一方で、JSON カバレッジ ファイルの何かが .JSX ファイルで欠落しているという事実が明らかになりました。私はそれを理解することができませんでした。私が知る限り、これは isparta または istanbul のバグです。私も試しistanbul@1.0.0-alpha.2てみましたが、同じ問題があることがわかりました。
  • React は、変換ユーティリティとエディターの利点のために、.JSX という名前のファイルを推奨するために使用されていました。これはもはや推奨事項ではありません。私が知る限り、それはもう問題ではありません。

.JS に切り替えて以来、Atom や IntelliJ などのツールで問題は発生していません。

ファイルの名前を変更したくない場合は、上記の例に次を追加できます。

  1. スクリプトで、 の後isparta coverに を追加し--include \"src/**/*_test.jsx\"ます。
  2. .istanbul.yml、追加
extensions:
  - .js
  - .jsx
于 2016-04-21T17:09:46.583 に答える
2

私はgulp-jsx-coverageを使用しています。

例として私の設定は次のとおりです。

var jsxCoverage = require('gulp-jsx-coverage');
gulp.task('test', ['lint', 'env:test'], jsxCoverage.createTask({
    src: ['src/**/*_test.js', 'src/**/*_test.jsx'],  // will pass to gulp.src as mocha tests
    istanbul: {                                      // will pass to istanbul
        coverageVariable: '__MY_TEST_COVERAGE__',
        exclude: /node_modules|tests|._test/         // do not instrument these files
    },
    transpile: {                                     // this is default whitelist/blacklist for transpilers
        babel: {
            include: /\.jsx?$/,
            exclude: /node_modules/
        }
    },
    coverage: {
        reporters: ['text', 'lcov', 'cobertura'],    // list of istanbul reporters
        directory: 'coverage'                        // will pass to istanbul reporters
    },
    mocha: {                                         // will pass to mocha
        reporter: 'spec'
    },
    babel: {                                         // will pass to babel
        sourceMap: 'inline',                         // get hints in HTML coverage reports
        plugins: []
    }
}));

* アップデート *

時間が経つにつれて、私は使用をやめることにしgulp-jsx-coverageました。私のテストでは が使用されbabel-rewire-plugingulp-jsx-coverageファイルが正しくインストルメント化されていなかったため、テストされていない生成コードが多数含まれるカバレッジ レポートが生成されました。ブエノなし。

現在のセットアップについては、2 番目の回答を参照してください。

于 2015-10-22T16:37:43.650 に答える