저는 karma, webpack 및 jasmine을 사용하여 코드 범위에 istanbul 및 isparta를 사용하여 ES6 코드를 테스트했습니다. 내 테스트는 모두 통과 한 것처럼 보이지만 jquery 및 jquery-resizable-dom을 가져와야하므로 적용 범위가 실제로 낮습니다. 테스트되지 않은 코드로 커버리지에 포함됩니다.isparta를 사용하여 karma의 코드 적용 범위에서 jquery와 같은 타사 가져 오기를 제외하려면 어떻게해야합니까?
나는 바닐라 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를 사용하는 모든 코드)을 제거하면 실제 적용 범위 (jquery 코드가 매우 짧음)에 더 가까운 94 %로 범프가 충돌합니다.
실제로 코드에서 얻은 숫자를 반영하기 위해 제 3 자 수입을 코드 적용 범위에서 제외시킬 수있는 방법이 있습니까?
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',
],
});
};
가 난 단지 몇 가지 이유가 전혀 범위를 반환하지 않는 소스 파일을 포함하기 때문에 테스트 파일을 포함 :
여기에 또한 내 카르마 설정입니다.
그래, 나도 그걸 알아 냈어. 나는 또한 sparta 대신 babel-istanbul-loader를 사용하기로 결정했습니다. 덕분에 완벽하게 작동합니다. – meyagen