我正在开发一个配置有webpack
,babel
和karma
的小型react-redux项目。我为业力添加了代码覆盖率,但是我找不到从覆盖范围中排除测试文件的方法。所以我的代码覆盖率有spec
个文件。
如何从coverage中排除这些spec
个文件?
我尝试使用正则表达式排除spec
个文件,但由于它是由webpack
加载的,因此无效。
tests.webpack.js
const context = require.context('./src', true, /.+\Spec\.js$/);
context.keys().forEach(context);
module.exports = context;
webpack.config.js
module.exports = {
entry: './src/index.js',
output: {
path: __dirname,
filename: 'dist/bundle.js'
},
devtool: 'source-map',
resolve: {
extensions: ['', '.js', '.scss'],
modulesDirectories: [
'node_modules',
'src'
]
},
module: {
preLoaders: [
{
test: /\.js$/,
loader: 'eslint-loader',
exclude: /node_modules/
}
],
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
],
},
};
karma.config.js
var path = require('path');
module.exports = function (config) {
config.set({
browsers: ['PhantomJS'],
singleRun: true,
frameworks: ['mocha', 'sinon-chai'],
files: [
'tests.webpack.js'
],
preprocessors: {
'tests.webpack.js': ['webpack', 'sourcemap']
},
reporters: ['mocha', 'osx', 'coverage'],
webpack: {
module: {
preLoaders: [
{
test: /\.js$/,
exclude: [
path.resolve('src/'),
path.resolve('node_modules/')
],
loader: 'babel'
},
{
test: /\.js$/,
include: path.resolve('src/'),
loader: 'isparta'
}
]
}
},
webpackServer: {
noInfo: true
},
coverageReporter: {
type: 'html',
dir: 'coverage/'
}
});
};
答案 0 :(得分:2)
这是我在我的项目中执行此操作的方式,我在每个组件中包含__test__
个文件夹中的所有测试。您应该能够将此更改为正则表达式/\.spec.js$/
。
karmaConfig.webpack.module.preLoaders = [{
test : /\.(js|jsx)$/,
include : new RegExp(config.dir_client),
loader : 'isparta',
exclude : [
/node_modules/,
/__test__/,
],
}];
在您的情况下,您需要在配置的这一位添加排除。
{
test: /\.js$/,
include: path.resolve('src/'),
loader: 'isparta'
}
答案 1 :(得分:0)
我通过在.forEach(context)之前放置一个.filter()来过滤掉我不想要的结果来解决这个问题。
const includes = require('lodash/includes');
const context = require.context('./src', true, /\.test\.js$/);
context.keys()
.filter(file => includes(file, './api/') === false)
.forEach(context);
您也可以直接将其写入.forEach()。
const includes = require('lodash/includes');
const context = require.context('./src', true, /\.test\.js$/);
context.keys()
.forEach(file => {
if (includes(file, './api/') === false) {
context(file);
}
});
如果您不使用Lodash,可以使用:
file.indexOf('./api/') === -1