业力并行执行测试用例两次
karma parallel executing test cases twice
我正在将我的 angular 从版本 4 升级到版本 7。我有与 运行 tdd 并行的业力,并且它按预期与 Angular 4 一起工作。现在升级后到 7 相同的测试在停止执行之前 运行ning 两次。
我的karma.conf.js如下,
const path = require('path');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: [ 'parallel', 'jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-parallel'),
require('karma-jasmine'),
require('karma-spec-reporter'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
parallelOptions: {
executors: 3, // For Jenkins enterprise, stick to 6 executors. For local laptop, change to 3-5
shardStrategy: 'round-robin'
},
client: {
jasmine: {
random: false
},
clearContext: false
},
coverageIstanbulReporter: {
reports: ['html', 'json', 'text-summary'],
dir: path.join(__dirname, 'coverage'),
fixWebpackSourcePaths: true
},
reporters: ['spec', 'kjhtml'],
specReporter: {
maxLogLines: 5,
suppressErrorSummary: true,
suppressFailed: false,
suppressPassed: false,
suppressSkipped: true,
showSpecTiming: true,
failFast: false
},
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadlessNoSandbox'],
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox', // required to run without privileges in docker
'--user-data-dir=/tmp/chrome-test-profile',
'--disable-web-security',
'--no-proxy=http://0.0.0.0:9876/'
]
}
},
singleRun: true,
concurrency: Infinity,
captureTimeout: 180000,
browserDisconnectTimeout: 90000,
browserNoActivityTimeout: 180000
});
};
用于运行测试用例的命令如下,
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng test --watch=false --code-coverage --source-map=false
请指教
所以我找到了问题所在。在 angular.json 文件中,我有 2 个项目都配置了测试块,这导致它 运行 两次。删除最后一个项目测试块解决了它。不确定 Angular 4 如何 运行 使用相同的配置 Angular 7 运行 TDD 两次。
当您 运行 ng test
时,它将 运行 所有 项目的测试。
例如,如果您的 angular.json
中有这两个项目:
hello-world
(10 次测试)
utilities
(100 次测试)
然后当您 运行 ng test
时,它将 运行 测试 hello-world
和 utilities
。
但是,如果您使用带有监视文件或启用自动监视的 Karma,它将在第一个项目停止,因此您只会看到 10 个测试 运行(或 100 个测试,具体取决于项目的顺序)。然后,当您按 Ctrl+C 并退出 Karma 进程时,它将继续下一个项目,编译它并 运行 测试。所以你会有两个测试运行s.
怎么办?
- 如果您有多个 Angular 应用程序但正在将 一个 部署到生产环境中,您应该使用
ng test <app>
作为您正在部署的项目名称。
- 如果您有一个 Angular 应用程序和一个 库 ,您将需要测试该应用程序和库:
ng test <app> && ng test <library>
- 如果你想 运行 完整的测试套件,只需
ng test
并且不要忘记将 Karma 更改为 运行 单个测试 运行 而不是自动监视更改的文件!
- 更新每个项目的
karma.conf.js
以确保它具有正确的设置(不观看,单人 运行,使用正确的浏览器)
我正在将我的 angular 从版本 4 升级到版本 7。我有与 运行 tdd 并行的业力,并且它按预期与 Angular 4 一起工作。现在升级后到 7 相同的测试在停止执行之前 运行ning 两次。 我的karma.conf.js如下,
const path = require('path');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: [ 'parallel', 'jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-parallel'),
require('karma-jasmine'),
require('karma-spec-reporter'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
parallelOptions: {
executors: 3, // For Jenkins enterprise, stick to 6 executors. For local laptop, change to 3-5
shardStrategy: 'round-robin'
},
client: {
jasmine: {
random: false
},
clearContext: false
},
coverageIstanbulReporter: {
reports: ['html', 'json', 'text-summary'],
dir: path.join(__dirname, 'coverage'),
fixWebpackSourcePaths: true
},
reporters: ['spec', 'kjhtml'],
specReporter: {
maxLogLines: 5,
suppressErrorSummary: true,
suppressFailed: false,
suppressPassed: false,
suppressSkipped: true,
showSpecTiming: true,
failFast: false
},
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadlessNoSandbox'],
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox', // required to run without privileges in docker
'--user-data-dir=/tmp/chrome-test-profile',
'--disable-web-security',
'--no-proxy=http://0.0.0.0:9876/'
]
}
},
singleRun: true,
concurrency: Infinity,
captureTimeout: 180000,
browserDisconnectTimeout: 90000,
browserNoActivityTimeout: 180000
});
};
用于运行测试用例的命令如下,
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng test --watch=false --code-coverage --source-map=false
请指教
所以我找到了问题所在。在 angular.json 文件中,我有 2 个项目都配置了测试块,这导致它 运行 两次。删除最后一个项目测试块解决了它。不确定 Angular 4 如何 运行 使用相同的配置 Angular 7 运行 TDD 两次。
当您 运行 ng test
时,它将 运行 所有 项目的测试。
例如,如果您的 angular.json
中有这两个项目:
hello-world
(10 次测试)utilities
(100 次测试)
然后当您 运行 ng test
时,它将 运行 测试 hello-world
和 utilities
。
但是,如果您使用带有监视文件或启用自动监视的 Karma,它将在第一个项目停止,因此您只会看到 10 个测试 运行(或 100 个测试,具体取决于项目的顺序)。然后,当您按 Ctrl+C 并退出 Karma 进程时,它将继续下一个项目,编译它并 运行 测试。所以你会有两个测试运行s.
怎么办?
- 如果您有多个 Angular 应用程序但正在将 一个 部署到生产环境中,您应该使用
ng test <app>
作为您正在部署的项目名称。 - 如果您有一个 Angular 应用程序和一个 库 ,您将需要测试该应用程序和库:
ng test <app> && ng test <library>
- 如果你想 运行 完整的测试套件,只需
ng test
并且不要忘记将 Karma 更改为 运行 单个测试 运行 而不是自动监视更改的文件! - 更新每个项目的
karma.conf.js
以确保它具有正确的设置(不观看,单人 运行,使用正确的浏览器)