业力并行执行测试用例两次

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-worldutilities

但是,如果您使用带有监视文件或启用自动监视的 Karma,它将在第一个项目停止,因此您只会看到 10 个测试 运行(或 100 个测试,具体取决于项目的顺序)。然后,当您按 Ctrl+C 并退出 Karma 进程时,它将继续下一个项目,编译它并 运行 测试。所以你会有两个测试运行s.

怎么办?

  • 如果您有多个 Angular 应用程序但正在将 一个 部署到生产环境中,您应该使用 ng test <app> 作为您正在部署的项目名称。
  • 如果您有一个 Angular 应用程序和一个 ,您将需要测试该应用程序和库:ng test <app> && ng test <library>
  • 如果你想 运行 完整的测试套件,只需 ng test 并且不要忘记将 Karma 更改为 运行 单个测试 运行 而不是自动监视更改的文件!
  • 更新每个项目的 karma.conf.js 以确保它具有正确的设置(不观看,单人 运行,使用正确的浏览器)