Karma - Chrome 失败 2 次(无法启动)。放弃

Karma - Chrome failed 2 times (cannot start). Giving up

我一直在尝试 运行 使用 karma-chrome-launcher 我的测试,但每次我 运行 我测试它引发此错误:

INFO [launcher]: Starting browser Chrome
ERROR [launcher]: Cannot start Chrome
INFO [launcher]: Trying to start Chrome again (1/2).
ERROR [launcher]: Cannot start Chrome   
INFO [launcher]: Trying to start Chrome again (2/2).
ERROR [launcher]: Cannot start Chrome
ERROR [launcher]: Chrome failed 2 times (cannot start). Giving up.

这是我的 karma.conf.js 代码:

// Karma configuration
// Generated on Mon Mar 23 2015 14:04:19 GMT-0300 (BRT)

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: 'www',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],


    // list of files / patterns to load in the browser
    files: [
      'lib/ionic/js/angular/angular.js',
      'lib/ionic/js/angular/angular-animate.js',
      'lib/ionic/js/angular/angular-sanitize.js',

      '../node_modules/jasmine-core/lib/jasmine-core/jasmine.js',
      '../node_modules/mock-local-storage/lib/mock-localstorage.js',
      '../node_modules/angular-mocks/angular-mocks.js',
      //'../node_modules/requirejs/require.js',
      'lib/ionic/js/angular/angular-resource.js',
      'lib/ionic/js/angular-ui/angular-ui-router.js',
      'lib/ionic/js/ionic.js',
      'lib/ionic/js/ionic-angular.js',
      /*'../tests/libs/ngCordovaMocks.min.js',*/
      'js/lib/ng-cordova.min.js',
      'js/*.js',
      'js/controllers/*.js',
      'js/services/*.js',
      'js/factory/*.js',
      //'../tests/*.js',
      '../tests/**/*.js'
    ],


    // list of files to exclude
    exclude: [
    ],


    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },


    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress', 'html'],

    htmlReporter: {
      outputFile: '../tests/report/index.html'
    },


    // web server port
    port: 9876,

    plugins : [
      'karma-junit-reporter',
      'karma-jasmine',
      'karma-phantomjs-launcher',
      'karma-chrome-launcher'
      //'karma-htmlfile-reporter'
    ],

    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,


    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['PhantomJS'],


    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false
  });
};

我在这里安装模块:https://www.npmjs.com/package/karma-chrome-launcher

谢谢!

我的部分灵感来自这里:

也可以使用 logLevel: config.LOG_DEBUG - 它可以帮助您了解导致错误的原因`

检查 karma.conf 中的以下设置:

captureTimeout: 60000,
browserNoActivityTimeout: 360000
browser: ["Firefox"]
  • captureTimeout - 您的浏览器可能需要一些时间才能启动。 LOG_DEBUG 应该会显示一些与捕获浏览器相关的错误
  • browserNoActivityTimeout - 与 Firefox 和 Chrome 相比,PhantomJS 在我的机器上真的很慢(x10)。 Karma 可能会在您的测试完成之前超时。
  • browser - 我们的 jenkins 服务器在 linux 上运行,我们没有 chrome 的二进制文件,所以我们不得不切换到 firefox

如果这三个设置中的任何一个设置不正确,我们就会收到您上面描述的错误。

我的构建环境也有同样的问题。

我所做的是按照 Rafael Cichocki 的建议启用调试:

logLevel: config.LOG_DEBUG

然后尝试使用与调试输出中可见的完全相同的行启动 chrome- 浏览器。

原来 chrome 浏览器因缺少 ttf 字体而崩溃。所以 运行:

apt-get install ttf-freefont

为我解决了这个问题,karma 开始启动 chrome。

我注意到当我遇到这个错误时,当我更改规范文件并保存它时,它似乎又可以工作了。我在打字稿中遇到了一些没有破坏测试的错误(将空参数传递给虚拟组件实例构造函数)。我不知道它是否正在解决错误,因为它们在它工作之前就存在,或者是否更改文件并保存它更新了缓存。

所以这可能意味着清除 Chrome 中的缓存也可能解决它。它现在又对我有用了,所以我无法检查以验证。

我遇到了同样的问题并尝试了很多我发现的建议解决方案,但最终为我解决的是删除 node_modules 文件夹并通过 npm install 获取所有新内容。

我们使用 angular cli 的解决方案是在 karma.conf.js

中设置以下属性
 autoWatch: false,
 singleRun: true

我能够通过删除绝对路径 (src/examplePath) 并将其更改为相对路径 (../../examplePath) 来解决此问题。

规范中的示例更改:

import { myPackage } from 'src/myPath';(似乎是问题所在)

import { myPackage } from '../../../myPath';(似乎解决了)

请注意,我曾尝试删除节点模块并安装 npm,但这没有用。我不太确定为什么这很重要。

以防万一您 运行 这背后是公司代理。确保将 0.0.0.0 包含在 NO_PROXY 环境变量中。

否则你的测试将首先通过你的防火墙出去,它很可能无法到达 0.0.0.0。所以为了确保我在

中包含以下内容
NO_PROXY=127.0.0.1,localhost,0.0.0.0

特别是如果您 运行 在容器环境(例如您的构建管道)中进行测试,则未设置环境变量可能是 ng 测试在本地计算机上正常工作但无法连接到 google-chrome 在容器中。

我也遇到了这个问题。我在 karma.config.js 文件中做了以下三处更改。

 autoWatch: false,
 browsers: ['Chrome'],
 singleRun: false

browsers: ['PhantomJS'],这里允许的浏览器是PhantomJs,但是代码正在尝试Chrome,这不是karma.conf.js.[=14=中指定的浏览器]

更改 karma.conf.js 文件 :

browsers: ['PhantomJS','Chrome', 'ChromeHeadless'],

chrome- 用于打开新的 chrome 浏览器 window.

ChromeHeadless- 用于 运行 无需打开浏览器的测试 window

确保 Chrome 已安装并添加到 PATH

希望对您有所帮助

在 Windows Chrome 之前安装到 %LOCALAPPDATA%/Google/Chrome/Application。现在它安装到 %PROGRAMFILES%/Google/Chrome/Application。如果您使用 Chrome 的时间很长,那么您在 %LOCALAPPDATA%/Google/Chrome/Application 中有旧版本。

Karma-launcher 正在搜索 Chrome 位置,顺序为 LOCALAPPDATA->PROGRAMFILES-> 'PROGRAMFILES(X86)' ,首先找到旧版本并尝试 运行 它。

只需删除 %LOCALAPPDATA%/Google/Chrome/Application 文件夹

我在将 macOS 更新到 Catalina 后遇到了这个问题。我通过将 Puppeteer 更新到最新版本解决了这个问题。

Karma.conf.js 中,将超时增加到 60000

captureTimeout: 60000,
browserDisconnectTimeout: 60000,
browserDisconnectTolerance: 3,
browserNoActivityTimeout: 60000,

对我有用的:

  • npm un karma-chrome-launcher

  • npm i karma-chrome-launcher

  • npm i -g karma-cli

  • karma init(并按照提示操作)

如果有人仅在 gitlab-runner 中遇到此错误(但在 shell 中手动 ng 测试工作正常),您可以从此处应用决定: https://forum.gitlab.com/t/running-karma-tests-with-chrome-and-gitlab-ci/14476

决定是:在karma.config.js中,替换

部分
browsers: ['Chrome'],

来自

browsers: ['ChromeHeadlessNoSandbox'],
customLaunchers: {
  ChromeHeadlessNoSandbox: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox']
  }
},

错误原因是Chrome不再支持no-sandbox

ng test --watch=false

在 karma.config.js 中使用设置为 false 的监视标志结合调整以下参数对我有用:

browsers: ['ChromeHeadlessNoSandbox'],
customLaunchers: {
  ChromeHeadlessNoSandbox: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox']
  }
},