【发布时间】:2020-09-27 18:41:46
【问题描述】:
每次我重新运行 Karma 时,它都会打开一个新的 Chrome 窗口,尽管屏幕上已经有一个并且其中的 URL 相同。
如何让 Karma runner 重复使用浏览器窗口以及是否打开了相应的选项卡 - 重复使用此选项卡?
【问题讨论】:
标签: browser karma-runner
每次我重新运行 Karma 时,它都会打开一个新的 Chrome 窗口,尽管屏幕上已经有一个并且其中的 URL 相同。
如何让 Karma runner 重复使用浏览器窗口以及是否打开了相应的选项卡 - 重复使用此选项卡?
【问题讨论】:
标签: browser karma-runner
在配置中,设置
browsers = [];
【讨论】:
我来到这里是在不同的背景下寻找相同的问题。
在运行测试时,有些情况下 Karma 会立即打开 2 个选项卡,因此所有测试都会运行两次。通常这不应该是一个问题,但在我们的例子中会导致一些意外的延迟和零星的故障。
确实,为了防止这种不良行为,应该在 Karma 配置中添加以下内容:
restartOnFileChange: true
根据 Karma 的规范,这会迫使跑步者停止当前执行并开始新的执行,从而有效地重复使用相同的当前选项卡。
默认行为 restartOnFileChange: false 会导致在当前执行继续运行时开始新的执行,从而有效地生成 2 个同时运行的选项卡。
【讨论】:
在 config.set({...}) 块内添加以下行:
restartOnFileChange: false,
这是保证。
使用该行,每当您保存文件时,浏览器都会自动刷新自身而不是重新打开。
以防万一,下面是我完整的karma.conf.js文件,效率很高:
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
jasmine: {
random: false
},
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, 'coverage'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: false,
});
};
在块中,我自己添加了以下内容:
jasmine: {
random: false
},
这使您的“it”块按照与您的规范文件中相同的顺序显示;
和
restartOnFileChange: false,
谁的功能是你想要的,我已经在上面提到了。
您可以在项目的 src/coverage/index.html 中打开代码覆盖率文件。
注意:有时 chrome 在您保存文件后不会自动刷新。您只需手动刷新它,整个测试就会重新开始。很简单。
【讨论】:
restartOnFileChange: true 实际上,无论如何,添加我自己的答案以使事情变得清晰。
false 是根据 Karma 规范的默认值; (B) 当true 时,它将停止当前执行并重新开始,逻辑上并根据规范。第二点确保上一次运行不会继续在其他选项卡中运行,同时打开新选项卡,但会强制关闭当前选项卡并重新开始 - 恕我直言,问题的用例.