使用したJavaScript単体テストおよびモックフレームワークとは何ですか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/209418

質問

私のメインのJavaScriptフレームワークは jQuery であるため、ユニットテストフレームワークとモック作成フレームワークがそれと互換性を持つようにします。別のJavaScriptフレームワークを導入する必要はありません。

現在、ユニットテストに QUnit を使用し、 Jack はモック用ですが、JavaScriptの単体テスト全体はかなり新しいです。

他の誰かが提案するより良いツールを持っていますか?何があなたのために働きましたか?

役に立ちましたか?

解決

QUnit
jQUnit
QUnitおよびjQUnitを使用したJSテストの記述

QUnitは、jQuery JavaScriptフレームワークの単体テストフレームワークです。テストフレームワーク自体はjQueryライブラリを使用しますが、テストは任意のJavaScript用に記述でき、jQueryを使用するためのコードは必要ありません。 JQUnitはQUnitの修正版であり、xUnitフレームワークに典型的なセットアップ、ティアダウン、およびアサート関数を追加し、すべてを1つのグローバル変数にカプセル化します。

testrunnerページの視覚的なインターフェイスは優れており、すべてのテストメソッドでドリルダウンして各アサートを確認できます。テストの作成は非常に簡単で、testRunnerページでテストコードを直接実行できます[8]。これにより、簡単で目に見えるDOMテストが可能になります。

QUnit:MITまたはGPL(選択)jQUnit:MITライセンス

長所
  -非同期サポート
  -DOMテストに適しています
  -テストは常にスイートに追加された順序で連続して実行されます
  -firebug
を使用してテストページでデバッグする   -構文はJQUnitを使用している場合はJUnitに似ていますが、QUnit
を使用している場合は簡単に習得できます 短所
  -自動化を実装するのは難しいでしょう

他のヒント

この記事の執筆時点で、JackはJavaScriptの最高のモックフレームワークであると思います。主な理由は、Javaのような厳密に型付けされた言語に適しているのはJavaScriptに適しているものではない可能性が高いことです。

多くのJavaScriptモックフレームワークは、Javaモックフレームワーク(優れたJsMockitoなど)に触発されています。しかし、これらの問題は、依存性の注入が必要であることです。これは、Javaでモックを使用する唯一の合理的な方法に関するものだからです。しかし、JavaScriptには、モックを使用する方法が多数あり、どこでも依存性注入を使用することを強制することはありません。

たとえば、JsMockitoでは、モックを作成してから、それらのモックをテスト対象ソフトウェア(SUT)に渡す必要があります。 SUTはモックを直接呼び出す必要があります。したがって、すべての依存関係をパラメーターとして受け取るコンストラクターまたは関数としてSUTをコーディングする必要があります。 (時々、それはそれを実装するための素晴らしい方法ですが、すべての場合においてではありません。モックフレームワークの設計が実装アプローチを強制する場合、尾は犬を振っている)。

JavaScriptでは、「ハイジャック」するのは非常に簡単です。任意の機能。そのため、依存関係を明示的に挿入することなく、その一部をモックできるように、何かを構築する方法がたくさんあります。たとえば、Jackを使用すると、パブリックであるかローカルオブジェクトであるかに関係なく、任意の関数をモックできます。そこから、それをスパイしたり、スタブしたり、期待を表明したりできます。重要なポイントは次のとおりです。関数をモックすると、その元の関数への呼び出しはすべてモックに送られます。つまり、モックされていない元の関数が呼び出された場合でも、モックは引き続き使用されます。その結果、依存関係を挿入することを強制されませんが、それを必要とする場合には確実に行うことができます。

JavaScriptはJava(およびC#など)とは異なる言語です。異なる実装イディオムが可能です。 依存性注入は、JavaScriptのツールボックスにある貴重なツールの1つですが、もはや町で唯一のゲームではありません。モックフレームワークは、その事実を知って尊重する必要があります。ジャックと他の数人はそうしますが、ジャックは最も成熟していて機能が豊富なようです。

JsTestDriver に誰も言及していない理由がわかりません。他の言語で単体テストツールを使用した場合に期待どおりに動作するJSテストツールの1つでなければなりません。

ブラウザに触れることなくテストを実行でき、IDEに統合でき、継続的インテグレーションシステムに統合できます。ああ、高速で、複数のブラウザで同時にテストを実行できます。

YUITestのような他のテストフレームワークを使用することもでき、さらに改善されます。

YUIテスト
TDD with YUI Test

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

jsspec jsspec を使用しています。あなたがrspecとBDDが好きなら、それはとてもいいです。 Justin Gehtlandの記事を使用して"ヘッドレス"

JavaScriptのモックについては、同僚と私が書いたフレームワークである qMock をご覧ください。 QUnitの使用を補完します。後者は単体テストには適していますが、非同期/ビジネスロジックの非常に効果的なテストはできません。どのリリースも安定版として「タグ付け」していませんが、そこにはまともなドキュメントがあり、svnをチェックアウトすると、qmock自体の背後にかなりわかりやすい単体テストがあります。

ああ、ビルドの一部としてテストを自動化するために、シンプルなセレンスクリプトを使用してテストスイート(JSファイルごとに1つのテストページ)をナビゲートし、合格または不合格のCSSクラスを「リスニング」しました(QUnitにより追加) 。 IE / FF2 AFAIKでもこれはヘッドレスで動作します

CrossCheckを見てみると非常に強力に見えましたが、現時点ではビルドプロセスに組み込みませんでした。ブラウザレスであるという利点があるため、自動化されたビルドとテストのシナリオでうまく機能するはずです。

http://thefrontside.net/crosscheck

HtmlUnit を試してみると、 JQuery互換リリース 1年以上前。

HtmlUnitの利点は、ブラウザーを駆動しないため高速であることです。

欠点は、ブラウザを駆動していないため、動作しないJSがいくつかあることです。ただし、JSサポートが必要なものに十分対応できるように、JQueryテストを実行できることを相殺します。

JsUnit は、ブラウザ、Eclipseプラグイン、またはANTタスク。テスト関数の束を含むHTMLページを作成します。テスト関数には、テストするJSファイルを含む接頭辞‘ test’を付けて名前を付ける必要があります。関数内のアサートが失敗すると、関数全体が失敗し、実行が停止します。これらのテストの実行順序は保証されていません。 setup()および teardown()関数を作成できます。

ライセンス:GPL、GLPL、MPL

長所

  • 自動化の実装は比較的簡単です
  • 多くの機能
  • 構文はJUnitに似ています

短所

  • iFrame内でテストを実行するため、DOMテストには適していません。
  • テストが記述された順序で実行されるという保証はありません。
  • testrunnerページでFirebugを使用できません。実際のテストコードで別のタブを開く必要があります。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top