【问题标题】:Is it possible to run Karma with no browsers at all?是否可以在没有浏览器的情况下运行 Karma?
【发布时间】:2014-03-20 16:45:26
【问题描述】:

我使用 Yeoman 的 yo angular 启动了一个 Angular.js 应用程序,其中包括 Karma 测试。然后,grunt test 合理地失败了,因为Karma can't find any browsers。 (browsers 尚未在应用的 node_modules/karma 配置文件中设置。)

我正在通过 SSH 对远程计算机进行开发,我认为(如果我错了,请告诉我)安装 Chrome /usr/bin/chromium-browser 毫无意义。

那么是否可以在没有任何浏览器的情况下运行 Karma?

【问题讨论】:

  • 为什么不使用 PhantomJS 而不是 Chrome?
  • 好点。我想我会明白的。但是是否可以在没有任何浏览器的情况下运行 Karma?
  • 不,Karma 确实需要浏览器。
  • 感谢您的确认。您可以将该评论作为答案并获得积分。顺便说一句,您的引述令人鼓舞:“对于一个伟大的程序员来说,最大的满足就是当他不理解的时候。” :)
  • 是的 :) 非常鼓舞人心 ;)

标签: javascript angularjs gruntjs yeoman karma-runner


【解决方案1】:

Karma 需要设置浏览器。

您可以使用 PhantomJS 代替 Chrome。
确实,它比传统的浏览器启动更加谨慎。

【讨论】:

  • 此评论是2014年发表的,还需要浏览器吗?
  • 是的,它仍然需要它。如果您不需要任何浏览器,您可能需要考虑 Mocha。
  • 继续滚动...真正的答案在下面。
  • PhantomJS 不再维护。避免使用它。
  • 我现在正遭受后果,升级到 Angular 9。使用ChromeHeadless
【解决方案2】:

从今天开始,这个问题和答案非常相关(即将在 2018 年,> angular2、@angular/cli、typescript...)。

这里是一个小的更新,基于我在网上发现的有用的内容:

假设您有一个angular cli 生成的项目尚未经过调整。假设您想使用 PhantomJS 来运行您的 angular2 测试(没有什么令人震惊的)。

首先在您的项目中为 Karma 安装 PhantomJS 启动器

npm i --save-dev karma-phantomjs-launcher

接下来您必须按如下方式更新karma.conf.js 文件:

首先是插件属性:

plugins: [
  require('karma-jasmine'),
  require('karma-phantomjs-launcher'),
  require('karma-jasmine-html-reporter'),
  require('karma-coverage-istanbul-reporter'),
  require('@angular/cli/plugins/karma')
],

然后是浏览器属性

browsers: [ 'PhantomJS' ],

此时运行测试,你可能会偶然发现以下错误:

PhantomJS 2.1.1 (Windows 7 0.0.0) ERROR
  TypeError: pre,template,textarea,script,style is not iterable!
  at http://localhost:9876/_karma_webpack_/polyfills.bundle.js:792

基本上,这意味着您的 PhantomJS 需要不同的 polyfill。在您的 src\polyfills.ts 中取消注释以下行

import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';

最后但同样重要的是,以下是帮助我解决此问题的链接:

How to run jasmine tests without browser ?

New angular-cli app not working on iphone 4s

【讨论】:

  • 别用了,PhantomJS 不支持了
  • @LevKolomazov 那么有什么替代方案呢?
【解决方案3】:

我要加两分钱。

正确 - Karma 需要浏览器才能运行。但是 - 您可以在 Headless 模式下运行 Chrome,这意味着虽然您确实需要安装浏览器,但它不会打开它的 UI,因此您可以纯粹通过 SSH 会话运行测试。

我们将此配置用于 CI/CD 部署。我们用于运行测试的 Docker 映像安装了 Chrome,我们使用 Chrome 无头模式运行它们。像魅力一样工作。

要使用它,只需在 karma.conf.js 中修改 browsers 属性

browsers: ['ChromeHeadless']

希望这可以帮助那些可能正在寻找类似东西的人......

【讨论】:

  • ChromeHeadless 就是答案。这应该在顶部。
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2012-07-06
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多