blog post演示了如何将Karma与React.js一起使用,但是当您运行npm run test
时,Karma会非常快速地打开浏览器并快速关闭它,不允许您要调试应用程序(它应该这样做)。我将配置更改为singleRun: false
,认为可能singleRun
关闭了应用程序。
我还添加了autoWatch: true
,希望它可以保持测试结果的可见性,但这也不起作用。
问题:如何获得业力以保持浏览器打开足够长的时间以查看测试结果并调试应用程序?
这是karma.config.js文件
var webpack = require('webpack');
module.exports = function (config) {
config.set({
// browsers: [ process.env.CONTINUOUS_INTEGRATION ? 'Firefox' : 'Chrome' ],
browsers: [ 'Chrome' ],
singleRun: true,
// autoWatch: true,
frameworks: [ 'mocha' ],
files: [
'tests.webpack.js'
],
preprocessors: {
'tests.webpack.js': [ 'webpack', 'sourcemap' ]
},
reporters: [ 'dots' ],
webpack: {
devtool: 'inline-source-map',
module: {
loaders: [
{ test: /\.js$/, loader: 'babel-loader' }
]
}
},
webpackServer: {
noInfo: true
}
});
};
答案 0 :(得分:8)
引用official docs Karma配置文件的默认名称为60
,请确保您的名称正确。
关于打开浏览器窗口,我遇到了类似的问题,我的解决方案是直接使用karma.conf.js
标志运行Karma。请尝试使用--auto-watch
代替$ karma start --auto-watch
(确保您已通过$ npm run test
全球安装了karma-cli
)。
您还应该检查$ npm install -g karma-cli
文件中的scripts:
配置部分。可能会在那里指定一些强制选项。
答案 1 :(得分:2)
singleRun:false
选项会自动恢复已关闭的浏览器窗口。您需要执行karma stop
或终止该过程。这对我来说非常烦人。
Karma的手表模式对我来说也很烦人,因为我有> 2500次测试需要很长时间才能执行。我不想在每次更改文件时触发它。
将Gulp与Karma API结合使用可提供更大的灵活性。
以下示例可用于测试单个文件并保持浏览器打开,直到手动关闭。它应用Karma的 browsers_change 事件来停止服务器。
相关信息:
var gulp = require('gulp');
var karma = require('karma');
var KarmaServerConstructor = karma.Server;
var karmaStopper = karma.stopper;
var commandLineArguments = require('yargs').argv;
//Executes only one test which has to be passed as command line argument --filePath
//The option --browser also has to be passed as command line argument.
//Example usage: gulp single --browser="Chrome_With_Saved_DevTools_Settings" --filePath="C:\myTest.spec.js"
gulp.task('single', function (done) {
var filePath = commandLineArguments.filePath.replace(/\\/g, "/");
var karmaOptions = {
configFile: __dirname + '/karma.conf.js',
action: 'start',
browsers: [commandLineArguments.browser],
files: [
'./Leen.Managementsystem/bower_components/jquery/dist/jquery.js',
'./Leen.Managementsystem/bower_components/globalize/lib/globalize.js',
{ pattern: './Leen.Managementsystem/bower_components/**/*.js', included: false },
{ pattern: './Leen.Managementsystem.Tests/App/test/mockFactory.js', included: false },
{ pattern: './Leen.Managementsystem/App/**/*.js', included: false },
{ pattern: './Leen.Managementsystem.Tests/App/test/*.js', included: false },
{ pattern: filePath, included: false },
'./Leen.Managementsystem.Tests/App/test-main.js',
'./switchKarmaToDebugTab.js' //also see https://stackoverflow.com/questions/33023535/open-karma-debug-html-page-on-startup
]
};
var karmaServer = new KarmaServerConstructor(karmaOptions, done);
karmaServer.on('browsers_change', stopServerIfAllBrowsersAreClosed);
karmaServer.start();
});
function stopServerIfAllBrowsersAreClosed(browsers) {
if (browsers.length === 0) {
//double check since browser might only be closed temporarily due to connection issues
setTimeout(function () {
if (browsers.length === 0) {
karmaStopper.stop();
}
}, 2000);
}
}