让 Karma 保持浏览器和测试结果打开的时间更长
have Karma keep browser and test results open longer
This project with an accompanyingblog post 演示了如何将 Karma 与 React.js 一起使用,但是当您 运行 npm run test
Karma 打开浏览器的速度非常快,关闭浏览器的速度几乎一样快,不允许你调试应用程序(它应该做的)。我将配置更改为 singleRun: false
,认为可能是 singleRun
正在关闭应用程序。
我还添加了 autoWatch: true
希望它能让测试结果可见,但这也不起作用。
问题:如何获取 karma 以保持浏览器打开足够长的时间以查看测试结果和调试应用程序?
这是 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
}
});
};
参考 official docs Karma 配置文件的默认名称是 karma.conf.js
,请确保您的名称正确。
关于让浏览器 window 打开,我遇到了类似的问题,我的解决方案是 运行 直接使用 --auto-watch
标志的 Karma。尝试 $ karma start --auto-watch
而不是 $ npm run test
(确保您已通过 $ npm install -g karma-cli
全局安装 karma-cli
).
您还应该检查 package.json
文件中的 scripts:
配置部分。可能会在此处指定一些强制选项。
singleRun:false
选项自动恢复关闭的浏览器 windows。您将需要执行 karma stop
或终止进程。这对我来说很烦人。
Karma 的监视模式对我来说也很烦人,因为我有超过 2500 个测试需要很长时间才能执行。我不想在每次文件更改时触发它。
将 Gulp 与 Karma API 结合使用可提供更大的灵活性。
以下示例可用于测试单个文件并保持浏览器打开直到手动关闭。它应用 Karma 的 browsers_change 事件来停止服务器。
相关信息:
- https://karma-runner.github.io/0.13/dev/public-api.html
- Karma run single test
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
]
};
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);
}
}
This project with an accompanyingblog post 演示了如何将 Karma 与 React.js 一起使用,但是当您 运行 npm run test
Karma 打开浏览器的速度非常快,关闭浏览器的速度几乎一样快,不允许你调试应用程序(它应该做的)。我将配置更改为 singleRun: false
,认为可能是 singleRun
正在关闭应用程序。
我还添加了 autoWatch: true
希望它能让测试结果可见,但这也不起作用。
问题:如何获取 karma 以保持浏览器打开足够长的时间以查看测试结果和调试应用程序?
这是 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
}
});
};
参考 official docs Karma 配置文件的默认名称是 karma.conf.js
,请确保您的名称正确。
关于让浏览器 window 打开,我遇到了类似的问题,我的解决方案是 运行 直接使用 --auto-watch
标志的 Karma。尝试 $ karma start --auto-watch
而不是 $ npm run test
(确保您已通过 $ npm install -g karma-cli
全局安装 karma-cli
).
您还应该检查 package.json
文件中的 scripts:
配置部分。可能会在此处指定一些强制选项。
singleRun:false
选项自动恢复关闭的浏览器 windows。您将需要执行 karma stop
或终止进程。这对我来说很烦人。
Karma 的监视模式对我来说也很烦人,因为我有超过 2500 个测试需要很长时间才能执行。我不想在每次文件更改时触发它。
将 Gulp 与 Karma API 结合使用可提供更大的灵活性。
以下示例可用于测试单个文件并保持浏览器打开直到手动关闭。它应用 Karma 的 browsers_change 事件来停止服务器。
相关信息:
- https://karma-runner.github.io/0.13/dev/public-api.html
- Karma run single test
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
]
};
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);
}
}