Можно ли запустить Карму без браузеров?

Я начал приложение Angular.js с Yeoman yo angular, которое включает в себя тестирование Karma. Тогда grunt test разумно провалился, потому что Карма не может найти браузеры. (browsers не был установлен в файле конфигурации приложения node_modules/karma.)

Я делаю свое развитие через SSH на удаленной машине, и я думаю (дайте мне знать, если я ошибаюсь) бессмысленно установить Chrome, /usr/bin/chromium-browser.

Так можно ли запускать Karma без каких-либо браузеров?

Ответы

Ответ 1

Карма нуждается в браузере, который будет установлен.

Вы можете использовать PhantomJS вместо Chrome.
Действительно, он более сдержанный, чем традиционный запуск браузера.

Ответ 2

Этот вопрос и ответ очень актуален на сегодняшний день (скоро 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';

И последнее, но не менее важное, вот ссылки, которые помогли мне разобраться в этом:

Как запустить тесты с жасмином без браузера?

Новое приложение angular-cli не работает на iphone 4s

Ответ 3

Я собираюсь добавить свои два цента к этому.

Правильно - Карма требует браузер для запуска. НО - вы можете запускать Chrome в режиме без головы, что означает, что, хотя браузер вам действительно нужен, он не откроет его пользовательский интерфейс, и поэтому вы можете запускать тесты, например, только через сеанс SSH.

Мы использовали эту конфигурацию для наших развертываний CI/CD. На нашем образе Docker для запуска тестов был установлен Chrome, и мы запустили их в режиме без головы Chrome. Работал как шарм.

Чтобы использовать это, просто измените свойство вашего browsers в вашем karma.conf.js

browsers: ['ChromeHeadless']

Надеюсь, что это может помочь кому-то, кто ищет что-то подобное...