カルマ、webpack、ジャスミンを使用して ES6 コードをテストし、コード カバレッジには istanbul と isparta を使用しています。私のテストはすべて合格したようですが、テストされていないコードとしてカバレッジに含まれる jquery と jquery-resizable-dom をインポートする必要があったため、カバレッジは非常に低くなっています。
多くのバニラ js コード (〜 200 行) がありますが、次のようなものを追加しました。
import $ from 'jquery';
require('imports?jQuery=jquery!jquery-resizable-dom');
const makeImagesResizable = () => {
$('.img').resizable({
handleSelector: '> .glyphicon-resize-full'
});
};
export { makeImagesResizable };
ジャスミンのテストでは、インポートmakeImagesResizable
してテストしました。テストを実行すると、カバレッジに jquery コードが含まれているため、27% のコード カバレッジが得られます。上記のコード ブロック全体 (jquery インポートと jquery を使用するすべてのコード) を削除すると、カバレッジが 94% になり、実際のカバレッジに近づきます (jquery コードはかなり短い)。
コードから実際に取得した数値を反映するために、サード パーティのインポートをコード カバレッジから除外する方法はありますか?
これも私のカルマ設定です:
const webpack = require('webpack');
const isparta = require('isparta');
module.exports = (config) => {
config.set({
frameworks: ['jasmine'],
files: [
'./spec/*.spec.js',
],
webpack: {
module: {
loaders: [
{ test: /\.js$/, loader: 'imports?define=>false!babel' },
],
},
},
webpackMiddleware: {
noInfo: true,
},
preprocessors: {
'./spec/*.spec.js': ['webpack', 'coverage'],
},
reporters: ['progress', 'coverage'],
coverageReporter: {
instrumenters: { isparta },
reporters: [
{
type: 'html',
dir: 'coverage',
},
],
},
browsers: ['Chrome'],
plugins: [
'karma-webpack',
'karma-jasmine',
'karma-coverage',
'karma-chrome-launcher',
],
});
};
ソースファイルを含めても何らかの理由でカバレッジがまったく返されないため、テストファイルのみを含めました。