我有一些存储库(A,B,C和TestRepo)所有这些都在本地,我得到业力从repos A或B或C加载规范文件与param(节点脚本)。
现在我试图转换文件导致一些测试正在使用import
所以我需要babel。我将babel配置为预处理器,它似乎正在工作,但我知道我得到了这个错误:
Uncaught Error: Module name "builder" has not been loaded yet for context: _. Use require([])
我尝试了所有我认识但仍然无效的配置。
我的karma.config.js就是这样:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine', 'requirejs'],
files: [
'test-main.js'
],
exclude: [
],
preprocessors: {
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity
});
}
我的test-main.js for requirejs:
var allTestFiles = []
var TEST_REGEXP = /(spec|test)\.js$/i
Object.keys(window.__karma__.files).forEach(function (file) {
if (TEST_REGEXP.test(file)) {
var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '')
allTestFiles.push(normalizedTestModule)
}
})
require.config({
baseUrl: '/base',
deps: allTestFiles,
callback: window.__karma__.start
})
我的节点文件,我设置karma文件,预处理器等基于我从params获得的存储库是这样的:
const cfg = require('karma').config;
const stopper = require('karma').stopper;
const runner = require('karma').runner;
const Server = require('karma').Server;
const path = require('path');
const REPOSITORY = process.argv[2] || '';
let karmaConfig = cfg.parseConfig(path.resolve('./karma.conf.js'), { port: 9876 } );
let BASE_PATH;
if (REPOSITORY !== 'all') {
BASE_PATH = `/Users/fernando.delolmo/${REPOSITORY}`;
karmaConfig.files.push({pattern: BASE_PATH + '/test/**/*.spec.js'});
karmaConfig.files.push({pattern: BASE_PATH + '/src/**/*.js', included: true});
karmaConfig.preprocessors[BASE_PATH + '/src/**/*.js'] = ['babel'];
karmaConfig.preprocessors[BASE_PATH + '/test/**/*.spec.js'] = ['babel'];
karmaConfig.exclude.push(BASE_PATH + '/node_modules/**/*.spec.js');
} else {
BASE_PATH = '/Users/fernando.delolmo/';
karmaConfig.files.push({pattern: BASE_PATH + '**/test/**/*.spec.js'});
karmaConfig.files.push({pattern: BASE_PATH + '**/src/**/*.js', included: true});
karmaConfig.preprocessors[BASE_PATH + '**/src/**/*.js'] = ['babel'];
karmaConfig.preprocessors[BASE_PATH + '**/test/**/*.spec.js'] = ['babel'];
karmaConfig.exclude.push(BASE_PATH + '**/node_modules/**/*.spec.js');
}
karmaConfig.basePath = BASE_PATH;
var server = new Server(karmaConfig, function(exitCode) {
process.exit(exitCode);
});
server.start();
server.on('browser_start', function() {
runner.run(karmaConfig, function(exitCode) {
process.exit(exitCode);
});
});
server.on('browser_complete', function() {
stopper.stop(karmaConfig, function(exitCode) {
process.exit(exitCode);
});
});
这是我第一次将karma,requirejs和babel一起配置,所以任何帮助都会很棒:)
答案 0 :(得分:-1)
好的,最后我得到了这里的问题。以防有人在这里找到解决这类问题的方法。
如果你想用带有业力的ES2015模块进行测试,你首先会使用babel来转换成CommonJS模块,这很好!但是......你会得到像导出未定义的错误..而且......为什么?浏览器仍然不支持简单的导出/导入,这意味着您可以在浏览器上运行CommonJS模块,而无需任何模块捆绑器(browersify或webpack)。
所以,请保持清楚:
1st - > Babel只会将您的ES2015代码转换为CommonJS模块并进行测试 第二 - > Webpack / Browersify获取CommonJS模块并将它们捆绑到bundle.js中,然后您可以在karma的浏览器上运行它。