gpt4 book ai didi

karma-runner - 如何让 Browserify、Babel 和 Coverage 在 Karma 中协同工作?

转载 作者:行者123 更新时间:2023-12-04 05:25:42 25 4
gpt4 key购买 nike

我越来越厌倦试图让节点库一起正常工作,但这是工作的一部分,所以就这样吧。

我有一个用于浏览器的 ES6 应用程序。当我的应用程序是用 ES5 编写时,我对我的文件进行了一组单元测试。我使用 Browserify 来处理导入/导出模块和捆绑我的发行版。在浏览器中运行应用程序时,这可以正常工作。我可以成功地浏览源文件和规范文件并运行测试,并且测试通过了。我非常接近让这个工作。

唯一的问题是覆盖范围。我最接近的是显示对 karma-browserify 生成文件的覆盖,每个文件看起来像这样:

require('/absolute/path/to/the/corresponding/file.js');

并且覆盖率显然显示为所有文件的 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 在源文件上运行,将生成的链接文件提供给源映射生成器,然后源映射生成器将生成的任何内容提供给 karma-coverage。但是 Browserify 和处理覆盖范围的任何东西之间存在一些通信损失。 Isparta(在幕后使用 Istanbul 尔)不知道 browserify 正在运行,我不知道它看到了什么。

如果有人在测试具有适当代码覆盖率的模块化 ES6 方面有任何经验,请告诉我我是否走在正确的轨道上,或者我是否应该尝试其他方法。

最佳答案

这是对我有用的配置,请注意我使用的是 browserify-istanbul 而不是 isparata。

var istanbul = require('browserify-istanbul');

module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['browserify', 'mocha'],
files: [
'test/**/*Spec.js'
],
exclude: [
'**/*.sw?'
],
preprocessors: {
'test/**/*Spec.js': ['browserify', 'coverage']
},
browserify: {
debug: true,
transform: [
['babelify', {
ignore: /node_modules/
}],
istanbul({
ignore: ['test/**', '**/node_modules/**']
})
],
extensions: ['.jsx']
},

babelPreprocessor: {
options: {
sourceMap: 'inline'
},
sourceFileName: function(file) {
return file.originalPath;
}
},
coverageReporter: {
dir: 'coverage/',
reporters: [
{ type: 'text-summary' }
]
},
browserNoActivityTimeout: 180000,
reporters: ['coverage', 'progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};

开始工作是一个巨大的痛苦。

希望有帮助

关于karma-runner - 如何让 Browserify、Babel 和 Coverage 在 Karma 中协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34915177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com