Angular 8 - Headless Chrome 运行两次,第二次失败

Posted

技术标签:

【中文标题】Angular 8 - Headless Chrome 运行两次,第二次失败【英文标题】:Angular 8 - Headless Chrome running twice and failing second time 【发布时间】:2020-08-22 16:35:39 【问题描述】:

在本地,我的测试用例在 Chrome 上运行良好,没有问题。我想在我的构建服务器 (Microsoft Azure) 上运行我的测试用例。

在我的服务器构建中,测试用例运行了两次。我只想运行一次。

我将配置作为 HeadlessChrome 传递。这些是我的配置。

在 package.json 文件中,

"test": "ng test --code-coverage --watch=false --browsers ChromeHeadless",

我的 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')
    ],

    // customLaunchers: 
    //   'ChromeHeadless_Sandbox': 
    //       base: 'ChromeHeadless',
    //       flags: [

    //           '--no-sandbox',

    //       ],
    //      debug: true
    //   ,
    // ,

    client:
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    ,
    coverageIstanbulReporter: 
      dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    ,

    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    browsers: ['ChromeHeadless'],
    autoWatch: false,
    concurrency: Infinity,
    singleRun: true, // Karma captures browsers, runs the tests and exits
  );
;

错误:

共有 131 个测试用例。 8个被跳过并且剩余的通行证正确。它运行第二次,它不工作。服务器将所有测试用例显示为失败。

我一直在 *** 和 Github 上探索所有类似问题的答案,但测试用例仍然运行了两次。两次它都在为 HeadlessChrome 运行,这很好,但它应该运行一次并退出。

PS - 还有一些我正在测试和尝试不同方式的注释代码。

请帮忙。我哪里做错了?如何让测试用例只运行一次?

【问题讨论】:

您找到解决方案了吗? 【参考方案1】:

我找到了解决办法。

问题是 angular.json 文件中有多个项目。

我在 angular.json 的“项目”中提到了三个项目。一个是我的应用程序,另一个是“app-e2e”,第三个是外部项目。当您运行 Karma 时,它会运行所有三个项目中的测试用例文件。

对于最后一个外部项目,有 karma 配置但没有测试用例,所以这就是它失败的原因。

对于我来说,这第三个项目不是必需的,所以我将它从 angular.json 中删除并删除它,然后 Karma 测试用例运行成功。

【讨论】:

如果从 angular.json 中删除项目不是一个选项(我有一个没有单元测试的库的测试/示例项目,但在 angular.json 中需要),您可以运行ng test project-name --watch=false 运行特定项目或从项目中删除测试配置而不进行测试。我没有测试过后者,但这应该也可以。

以上是关于Angular 8 - Headless Chrome 运行两次,第二次失败的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在 Angular 测试阶段出现以下问题:Chrome Headless has not capture in 60000 ms, kill

Headless Chrome Circle CI - 错误:spawn /usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/bin/java ENOENT

Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染

如何在 Jenkins env 变量中为 Headless Chrome 配置 CHROME_BIN 路径

ubuntu+jdk

Chrome 开发工具可以帮助找出 Angular 组件名称吗?