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