Angular.jsアプリをYeomanのyo angular
Karmaテストが含まれています。そうして grunt test
Karmaはブラウザを見つけることができません のため、合理的に失敗しました。 (browsers
はアプリのnode_modules/karma設定ファイルで設定されていません。)
私はSSHを介してリモートマシンに開発を行っています。これは、Chromeを使用しても意味がない(私が間違っている場合は知らせてください)/usr/bin/chromium-browser
、インストール済み。
では、ブラウザなしでKarmaを実行することは可能ですか?
Karma needs設定するブラウザ。
Chromeの代わりにPhantomJSを使用できます。
確かに、これは従来のブラウザの起動よりも目立たないものです。
この質問と回答は、今日(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
が異なるポリフィルを必要とすることを意味します。 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セントを加算します。
正解-Karmaを実行するにはブラウザが必要です。ただし、Chrome=ヘッドレスモードで実行できます。つまり、ブラウザをインストールする必要はありますが、UIは開かないため、たとえば、SSHセッションだけでテストを実行できます。 。
この構成をCI/CD展開に使用しました。テストを実行するためのDockerイメージにはChromeがインストールされており、Chromeヘッドレスモードで実行しました。チャームのように動作しました。
これを使用するには、karma.conf.js
のbrowsers
プロパティを変更するだけです
browsers: ['ChromeHeadless']
これが似たようなものを探している誰かを助けるかもしれないことを願っています...