ノード ライブラリを適切に連携させることにうんざりしていますが、それも仕事の一部なので、ここで説明します。
ブラウザ用の ES6 アプリケーションがあります。アプリケーションが ES5 で作成されたときに作成したファイルの単体テストのセットがあります。Browserify を使用して、モジュールのインポート/エクスポートとディストリビューションのバンドルを処理しています。ブラウザでアプリケーションを実行すると、これは正常に機能します。ソース ファイルと仕様ファイルを正常に Browserify してテストを実行でき、テストはパスします。私はこれを機能させることに非常に近づいています。
唯一の問題はカバレッジです。最も近いのは、karma-browserify で生成されたファイルのカバレッジを示すことです。それぞれ次のようになります。
require('/absolute/path/to/the/corresponding/file.js');
また、各ファイルは 1 行にすぎないため、カバレッジは明らかにすべてのファイルで 100% と表示されます。
これは私の karma.conf.js です:
import babelify from 'babelify';
import isparta from 'isparta';
import paths from './paths';
var normalizeBrowserName = (browser) => browser.toLowerCase().split(/[ /-]/)[0];
export default function(config) {
config.set({
basePath: '..',
browsers: ['PhantomJS'],
frameworks: ['browserify', 'jasmine'],
files: paths.test.files,
preprocessors: {
'app/**/*.js': ['browserify', 'sourcemap', 'coverage'],
[paths.test.testFiles]: ['babel'],
},
plugins: [
'karma-babel-preprocessor',
'karma-browserify',
'karma-coverage',
'karma-jasmine',
'karma-junit-reporter',
'karma-phantomjs-launcher',
'karma-sourcemap-loader',
],
autoWatch: false,
colors: false,
loggers: [{ type: 'console' }],
port: 9876,
reporters: ['progress', 'dots', 'junit', 'coverage'],
junitReporter: {
outputFile: paths.test.resultsOut,
suite: '',
},
browserify: {
debug: true,
noParse: paths.js.noparse(),
configure: (bundle) => {
bundle.once('prebundle', () => bundle.transform(babelify.configure({ ignore: 'lib/!**!/!*' })));
},
},
coverageReporter: {
instrumenters: { isparta },
instrumenter: {
[paths.test.cover]: 'isparta',
},
reporters: [
{ type: 'text', },
{ type: 'html', dir: paths.test.coverageOut, subdir: normalizeBrowserName },
{ type: 'cobertura', dir: paths.test.coverageOut, subdir: '.', file: 'coverage.xml' },
],
},
logLevel: config.LOG_DEBUG,
});
};
これらのライブラリがどのように機能するのかまったくわからないため、これをデバッグする際にどこから始めればよいかわかりません。Browserify がソース ファイルで実行され、結果のリンク ファイルがソース マップ ジェネレーターにフィードされ、ソース マップ ジェネレーターがその結果をカルマ カバレッジにフィードするように、プリプロセッサの順序が重要であることを理解しています。しかし、Browserify とカバレッジを処理するものとの間の通信がいくらか失われます。Isparta (バックグラウンドで istanbul を使用) は、browserify が実行されていることを認識していません。
モジュール化された ES6 を適切なコード カバレッジでテストした経験のある方がいらっしゃいましたら、私が正しい方向に進んでいるのか、それとも別の方法を試す必要があるのかをお知らせください。