web-dev-qa-db-ja.com

AngularJSのテストランナー-Eclipse IDEおよびCIサーバーからあまり複雑にすることなくテストを実行する方法は?

私はangularjsアプリケーションでテストを実行する簡単な方法を見つけようとしています。私はテストの世界に慣れていないので、すべてのオプションとそれらの違いを理解するのは少し難しいです。

私の目標は、私のIDE --Eclipse内から簡単にテストを実行できるようにすることです。そして、Google chromeブラウザでコードをテストすることです。

私はジャスミンがjsユニットテストを書くための明白な選択であることに気づきました。問題は、ジャスミンテストとe2eテストの両方でランナーを選択することです。

シンプルにしようと、セットアップについて次のアイデアを思いつきました。ユニットテストをjasmineで記述し、e2eテストをphantomjsとsyn.jsで記述します。次に、外部ツールとしてphantomjsを実行するようにEclipseを構成し、出力がEclipseのコンソールに送られるようにします。

また、JenkinsでCIジョブを実行する予定です。私の理解では、Jenkinsはファントムも実行できるため、理論的には、このソリューションはCIでも同じように機能します。

または、KarmaやProtractorなどのテスト実行ツールがあります。推奨されているように見えますが、私にはやり過ぎのように見える場合もあります。それらが機能するためには、多くの異なるツール/サービス/プロセスを実行する必要があり、それが壊れた場合、すべてのセットアップを維持するのは苦痛のようです。

私の理解では、分度器はnodejsで実行されるwebdriverjsで実行され、Seleniumサーバーがバックグラウンドで実行されている必要があります。さらに、Seleniumは実際のブラウザーウィンドウを開きます。これは、ヘッドレスブラウザーテストとは対照的に少し無意味に見えます。

それからカルマがあります、それは私がそれが何をすべきかをまだ完全には理解していませんでした。私が読んだものから、プロジェクト内のファイルを監視し、ファイルが変更されるたびにテストを実行します。テストをどのように実行するかわかりません-セレンも使用していますか?

そして最後に、うなり声とヨーマンがありますが、それらが何をしているのか、そしてそれらがどのように相互作用するか、または私がリストした他のツールとどのように適合するのかを私はまったく理解していませんでした。

誰かがこれらの異なるツールが何をするのか、そしてそれらがどのように組み合わされるのかを明確にしていただければ幸いです。また、CIサーバーとしてJenkinsにどのように適合しますか?

また、私の「より簡単なセットアップ」についてコメントしていただければ、それは理にかなっていますか?私は何かが足りないのですか?

13
Malki

Karmaは、Angularを使用しているかどうかに関係なく、JSの単体テスト用です。Karmaを使用した単体テストの詳細については、ここで詳しく説明しています: http:// www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-karma.html 。はい、Karmaは必要に応じてブラウザーウィンドウを開閉し、構成ファイルで指定します。任意のブラウザーウィンドウを開きたい場合は、PhantomJSを使用できます。Karmaは、外部スクリプトを実行できるほとんどのIDE内から実行するか、コマンドラインから実行できます。

分度器は、プロジェクト全体のエンドツーエンド(またはE2E)テスト用です。ブラウザウィンドウが開き、ユーザーであるかのようにページをクリックして、指示した場所にデータを入力し、指定された結果を探します。分度器は、ジャスミンを書くよりも少し複雑ですが、結果はそれだけの価値があります。 Karmaと同様に、外部スクリプトを実行できるほとんどのIDE内から、またはコマンドラインを介してProtractorを実行できます。

Yeomanは、Bowerによる依存関係管理、Gruntによるタスク自動化、およびYoによるプロジェクト管理を組み込んだプロセス管理システムです。 KarmaとProtractorでテストを実行し、JS、CSS、およびHTMLを縮小し、すべてを適切なファイル(内部JS、外部ライブラリ、およびCSS)にコンパイルし、デプロイ可能な完全なパッケージを提供します。ヨーマンの美しさは、特定のIDEに固有のものではないことです。 IDEでスクリプトを作成するか、コマンドラインを使用して、すべてを実行できます。

さて、ヨーマンについてこれをすべて言ったとしても、あなたはまだテストを書いて(魔法のようにあなたのためにそれらを思い付くことはありません)そしてそれをあなたの開発ルーチンに統合することを学ぶ必要があります、しかしそれは間違いなく行く方法ですJS開発。 EclipseはJS開発には問題ありませんが、WebStormからパフォーマンスと使いやすさ(IMHO)が向上します。

これらすべてがJenkinsのようなCIにどのように適合するかについては、KarmaとProtractorの両方の出力テスト結果が、Jenkinsが読み取って表示できる形式であると思います。 Jenkinsのスクリプトの可能性により、ソース管理リポジトリ(ある種のソース管理を使用しているのではないですか?)が変更されるたびにビルドプロセスを実行するように構成し、それらの結果をJenkinsページに表示できます。私のオフィスは非常によく似た設定で、毎日使用しています。私はJenkinsの構成を行う必要がある人ではありませんが、WebStormを介してYeoman(したがって、KarmaとProtractor)と定期的に連携しており、非常に良い結果が得られています。

21
MBielski

ここでの明確な選択は、カルマと分度器です。彼らが他の多くのものに依存しているのは事実ですが、かなり消毒的にそうしています。分度器はSeleniumサーバーを起動し、完了するとシャットダウンします。ノードをインストールすると、他のインストールはすべて非常に簡単になります。 httpster もインストールします。これは、ポート3333でパブリックディレクターにサービスを提供します。

率直に言って、Javaの世界でTDDを10年間行ってきたので、数年前に(再び)Javascriptを最初に見たとき、テストの全体像は完全な冗談でした。しかし今、私はKarmaとProtractorの組み合わせは非常に素晴らしいと思います。IntelliJ内では、Karmaテストを実行できます。テストはばかげて高速であり、結果はJava world(Xcode 5は最高のテスト統合を備えています)。IntelliJにddescribeプラグインをインストールして、個々のテストを実行したり、テストを除外したりするためのuiを使用することもできます。

分度器側では、カルマ、分度器、そしてJUnitテストを継続的インテグレーションサーバー(JenkinsまたはTeamCity)で実行する段階にあるため、この投稿を見つけました。旅行のその区間の情報が不足していることに少し驚いていましたが、Gruntがあることがわかります。これは、 分度器テストを実行 その後、Jenkinsが必要とするJUnitスタイルの出力を生成するためです。 。 Gruntは、JSの世界への非常に印象的な追加でもあります。

これはたくさんの意見のように聞こえますが、Javaの世界で起こったように、Javascriptの世界は今、あなたが物事を期待しなければならない成熟度に達していると思います率直に言って、nodeとnpmは、それを非常にシームレスにするという非常に優れた仕事をしているように見えます(Java世界のMavenの10年後)。

3
Rob

更新:申し訳ありませんが、あなたの質問を正しく読みませんでした。

カルマはジャスミンに最適なテストランナーです。セットアップはとても簡単です。ノードをダウンロードし、npm installkarmaをインストールしてください。 angularシードサンドボックスプロジェクトに従ってください。単体テストとエンドツーエンドテスト用にセットアップされたすべての基本的な構成が含まれています(構成フォルダー内)。必要なのは、Eclipseにインストールされたnodejsプラグインだけです。

Yeomanは、JavaScriptの縮小、Sassのコンパイルなどに使用できます。

0
madhured