我与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吗?
答案 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';
最后但并非最不重要的是,以下链接帮助我解决了这个问题:
答案 2 :(得分:2)
我将为此加两分钱。
正确-Karma需要浏览器才能运行。但是-您可以在无头模式下运行Chrome,这意味着尽管您确实需要安装浏览器,但它不会打开其UI,因此您可以纯粹通过例如SSH会话来运行测试。
我们在CI / CD部署中使用了此配置。我们用于运行测试的Docker映像已安装了Chrome,并且我们以Chrome无头模式运行了它们。像魅力一样工作。
要使用此功能,只需在browsers
中修改您的karma.conf.js
属性
browsers: ['ChromeHeadless']
希望这可能会帮助那些正在寻找类似东西的人...