私のメインのJavaScriptフレームワークは jQuery なので、ユニットテストとモックのフレームワークに互換性を持たせたいと思います。別のJavaScriptフレームワークを導入する必要はありません。
私は現在、ユニットテストに QUnit を使用し、モックに Jack を使用していますが、JavaScriptのユニットテスト全体にはかなり慣れていません。
他の誰かが提案するためのより良いツールを持っていますか?何があなたのために働いたのですか?
QUnit
jQUnit
QUnitとjQUnitを使用してJSテストを作成する
QUnitは、jQueryJavaScriptフレームワークのユニットテストフレームワークです。テストフレームワーク自体はjQueryライブラリを使用しますが、テストは任意のJavaScript用に記述でき、jQueryを使用するためのコードは必要ありません。 JQUnitはQUnitの修正バージョンであり、xUnitフレームワークでより一般的なセットアップ、ティアダウン、およびアサート関数を追加し、すべてを1つのグローバル変数にカプセル化します。
テストランナーページのビジュアルインターフェイスはNiceであり、ドリルダウンしてすべてのテストメソッドの各アサーションを確認できます。テストの作成は非常に簡単で、testRunnerページ[8]で直接テストコードを実行できます。これにより、簡単で目に見えるDOMテストが可能になります。
QUnit:MITまたはGPL(選択)jQUnit:MIT License
長所
-非同期サポート
-DOMテストに適しています
-テストは常にスイートに追加された順序で順番に実行されます
-firebugを使用してテストページでデバッグする
-構文はJQUnitを使用する場合はJUnitに似ていますが、QUnitを使用する場合は簡単に習得できます。
短所
-自動化を実装するのは難しいでしょう
この記事の執筆時点では、JackがJavaScriptの最高のモックフレームワークだと思います。主な理由は、JavaScriptに適切なものは、Javaなどの強く型付けされた言語に適切なものではない可能性が高いためです。
多くのJavaScriptモックフレームワークはJavaモックフレームワーク(たとえば、優れたJsMockitoなど)に触発されています。しかし、これらの問題は、 require です。これがJavaでモックを使用する唯一の合理的な方法であるためです。しかしJavaScriptでは、モックを使用する方法はたくさんあり、どこでも依存性注入を使用するように強制する必要はありません。
たとえば、JsMockitoでは、モックを作成してからそれらのモックをテスト対象ソフトウェア(SUT)に渡す必要があります。 SUTはモックを直接呼び出す必要があります。したがって、SUTを、すべての依存関係をパラメーターとして受け取るコンストラクターまたは関数としてコーディングする必要があります。 (場合によっては、それを実装するための優れた方法ですが、すべての場合ではありません。モックフレームワークの設計が実装アプローチを強制する場合、尻尾が犬を振っています)。
JavaScriptでは、任意の関数を「ハイジャック」するのは非常に簡単です。したがって、依存関係を明示的に注入せずにその一部をモックできるように、何かを構築する方法はたくさんあります。たとえば、Jackを使用すると、パブリックまたはローカルオブジェクトに関係なく、any関数をモックできます。そこから、スパイしたり、スタブしたり、期待を表明したりできます。重要な点は次のとおりです。関数をモックすると、その元の関数への呼び出しはすべて、代わりにモックに転送されます。つまり、元のモックされていない関数が呼び出された場合でも、モックは引き続き使用されます。その結果、依存関係を挿入する必要はありませんが、依存関係を挿入する必要がある場合は確実に挿入できます。
JavaScriptはJava(およびC#など)とは異なる言語です。さまざまな実装イディオムが可能です。依存性注入はJavaScriptのツールボックスの貴重なツールの1つですが、もはや町で唯一のゲームではありません。あなたのモックフレームワークはその事実を知り、尊重する必要があります。ジャックと他の数人はそうしますが、そうするものの中で、ジャックは最も成熟していて機能的であるように見えます-リッチ。
なぜ誰も言及していないのかわかりません JsTestDriver !これは、他の言語の単体テストツールを使用した場合に期待どおりに実際に機能する唯一のJSテストツールの1つである必要があります。
テストの実行は、ブラウザーに触れることなく実行でき、IDEと統合でき、継続的インテグレーションシステムと統合できます...ああ、高速で、複数のブラウザーで同時にテストを実行できます。
YUITestのような他のテストフレームワークを使用して、さらに優れたものにすることもできます。
YUI Testは、Yahooのユーザーインターフェースライブラリのテストフレームワークです。 Yahooが独自のライブラリをテストするために使用し、jUnitと同様の構文を持っています。
JsUnitと同様に、YUI Testには、各テストの結果に加えて、情報、警告、およびエラーを出力できる独自のログコンソールが付属しています。
YUIには、結果をJSONまたはXML形式で レポートを送信 する機能もあります。
YUIテストはBSDライセンスです。
長所
-本当に良いドキュメント
-アクティブなコミュニティ
-通常のリリース
-構文はjUnitに似ています(テストスイート、アサート、セットアップ/ティアダウン)
-非同期サポート
-DOMテストに適しています
-テストは常にスイートに追加された順序で順番に実行されます
短所
-自動化の実装は簡単ではありませんが、他のフレームワークほど難しくありません
また、チェックしてください http://sinonjs.org/
テストスパイテストスタブモック偽のタイマー偽のXHR偽のサーバーサンドボックスアサーション
これはqUnitと連携して機能し、これまでのところプラスになっています。
これは、Javascriptで利用可能なモックフレームワークのかなり良いレビューです。
http://testdrivenwebsites.com/2010/05/06/Java-script-mock-frameworks-comparison
Mozillaの開発では、MozUnitに基づいていますが、まだアクティブな [〜#〜] uxu [〜#〜] に恋をしています。モックサーバーやsleep/yeldメソッドなどの優れた機能があります。
私はScrewUnitテストフレームワークを使用しており、自分で作成しました jsMochaというモックライブラリ これは、6か月以上勤務している会社で頻繁に使用されています。
Jsspec jsspec を使用しています。あなたがrspecとBDDが好きなら、それはとても素晴らしいです。 Justin Gehtlandによる記事 「ヘッドレス」の使用についても見ました。
JavaScriptでのモックについては、同僚のフレームワークである qMock を見てください。私は、QUnitの使用を補完するために作成しました。後者は単体テストには最適ですが、非常に効果的な非同期/ビジネスロジックテストはできません。私たちはどのリリースも安定していると「タグ付け」していませんが、そこにはいくつかのまともなドキュメントがあります。svnをチェックアウトすると、qmock自体の背後にユニットテストがあり、かなり自明です。
ああ、ビルドの一部としてテストを自動化するために、単純なSeleniumスクリプトを使用してテストスイート(JSファイルごとに1つのテストページ)をナビゲートし、CSSクラスの合格または不合格(QUnitによって追加)を「リッスン」しました。これは、IE/FF2AFAIKでもヘッドレスで機能します
JsUnit は、ブラウザーから、Eclipseプラグインを介して、またはANTタスクを介して自動的に実行されます。接頭辞「test」を付けて名前を付ける必要がある一連のテスト関数を含むHTMLページを作成し、テストするJSファイルを含めます。関数内のいずれかのアサートが失敗すると、関数全体が失敗し、実行が停止します。これらのテストが実行される保証された順序はありません。 setup()
およびteardown()
関数を作成できます。
ライセンス:GPL、GLPL、MPL
長所
短所
あなたがJQuery互換のフレームワークを求めていることは知っていますが、完全を期すために script.aculo.us を組み合わせたいと思います。彼らは ユニットテスト 悪くないスイートを持っています。
1年以上前に JQuery互換リリース があった HtmlUnit を試すことができます。
HtmlUnitの利点は、ブラウザを駆動しないため、高速であるということです。
欠点は、ブラウザを駆動していないため、動作しないJSがいくつかあることです。ただし、JQueryテストを実行できることを相殺して、JSサポートで必要なものを十分に満たすことができるようにします。
CrossCheckを見ると非常に強力に見えましたが、現時点ではビルドプロセスに組み込んでいません。ブラウザがないという利点があるため、自動化されたビルドとテストのシナリオでうまく機能するはずです。