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

时间:2014-02-20 01:01:00

标签: javascript angularjs gruntjs yeoman karma-runner

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

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

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

3 个答案:

答案 0 :(得分:18)

Karma 需要要设置的浏览器。

您可以使用PhantomJS代替Chrome 实际上,它比传统的浏览器发布更加谨慎。

答案 1 :(得分:11)

截至今天(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

答案 2 :(得分:2)

我将为此加两分钱。

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

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

要使用此功能,只需在browsers中修改您的karma.conf.js属性

browsers: ['ChromeHeadless']

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