我越来越厌倦试图让节点库一起正常工作,但这是工作的一部分,所以就这样吧。
我有一个用于浏览器的 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 在源文件上运行,将生成的链接文件提供给源映射生成器,然后源映射生成器将生成的任何内容提供给业力覆盖。但是 Browserify 和处理覆盖范围的任何东西之间存在一些通信损失。Isparta(在幕后使用伊斯坦布尔)不知道 browserify 正在运行,我不知道它看到了什么。
如果有人在测试具有适当代码覆盖率的模块化 ES6 方面有任何经验,请让我知道我是否走在正确的轨道上,或者我是否应该尝试其他方法。