Ответ 1
Карма нуждается в браузере, который будет установлен.
Вы можете использовать PhantomJS вместо Chrome.
Действительно, он более сдержанный, чем традиционный запуск браузера.
Я начал приложение Angular.js с Yeoman yo angular
, которое включает в себя тестирование Karma. Тогда grunt test
разумно провалился, потому что Карма не может найти браузеры. (browsers
не был установлен в файле конфигурации приложения node_modules/karma.)
Я делаю свое развитие через SSH на удаленной машине, и я думаю (дайте мне знать, если я ошибаюсь) бессмысленно установить Chrome, /usr/bin/chromium-browser
.
Так можно ли запускать Karma без каких-либо браузеров?
Карма нуждается в браузере, который будет установлен.
Вы можете использовать PhantomJS вместо Chrome.
Действительно, он более сдержанный, чем традиционный запуск браузера.
Этот вопрос и ответ очень актуален на сегодняшний день (скоро 2018,> angular2, @angular/cli, машинопись,...).
Вот небольшое обновление, основанное на том, что я нашел полезным в сети:
Скажем, у вас есть angular cli
проект, сгенерированный, который не был изменен. Скажем, вы хотите использовать PhantomJS
для запуска ваших тестов angular2 (ничего шокирующего).
Начните с установки PhantomJS
запуска PhantomJS
для Karma в свой проект
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
нужны разные полифилы. Раскомментируйте следующие строки в вашем 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';
И последнее, но не менее важное, вот ссылки, которые помогли мне разобраться в этом:
Я собираюсь добавить свои два цента к этому.
Правильно - Карма требует браузер для запуска. НО - вы можете запускать Chrome в режиме без головы, что означает, что, хотя браузер вам действительно нужен, он не откроет его пользовательский интерфейс, и поэтому вы можете запускать тесты, например, только через сеанс SSH.
Мы использовали эту конфигурацию для наших развертываний CI/CD. На нашем образе Docker для запуска тестов был установлен Chrome, и мы запустили их в режиме без головы Chrome. Работал как шарм.
Чтобы использовать это, просто измените свойство вашего browsers
в вашем karma.conf.js
browsers: ['ChromeHeadless']
Надеюсь, что это может помочь кому-то, кто ищет что-то подобное...