ユーザーが場所を検索して地図上に表示できる JavaScript アプリケーションがあります。場所の検索は、サーバー アプリケーションへの AJAX 呼び出しで行われます。このサーバー通信 (searchComponent) を担当する 1 つのコンポーネントがあり、通信が機能するかどうかを単体テストしたいと考えています。
カスタム イベントの説明
私のカスタム イベントは、 http://api.jquery.com/jQuery.Callbacks/から取得した単純な Publish/Subscribe 実装です。
var topics = {};
jQuery.Topic = function( id ) {
var callbacks,
method,
topic = id && topics[ id ];
if ( !topic ) {
callbacks = jQuery.Callbacks();
topic = {
publish: callbacks.fire,
subscribe: callbacks.add,
unsubscribe: callbacks.remove
};
if ( id ) {
topics[ id ] = topic;
}
}
return topic;
};
最も重要な方法は次のとおりです。
EVENT.publish(data)
イベントをトリガーし、データをすべてのサブスクライバーに渡します。EVENT.subscribe(callback)
コールバック関数を EVENT にサブスクライブします。EVENT がトリガーされるたびに、コールバック関数が実行されます。
使用事例
基本的なワークフローは次のとおりです。
- ユーザーが検索ボタンをクリックする
- アプリケーションが呼び出す
searchComponent.doSearch()
searchComponent.doSearch()
リクエストをサーバーに送信します- サーバーが応答する
- searchComponentは、または_
SEARCH_RESULT
SEARCH_FAILED
- アプリケーションは両方のイベントをリッスンし、そこから続行します (マップ上に物を表示するか、エラー メッセージを生成します)。
SEARCH_RESULT
SEARCH_FAILED
上記のカスタムイベントです。
var SEARCH_RESULT = jQuery.Topic('SEARCH_RESULT');
var SEARCH_FAILED = jQuery.Topic('SEARCH_FAILED');
私は何をしたいですか?
searchComponent が機能しているかどうかをテストしたい:
- サーバーへのリクエストは正しく行われていますか?
- サーバーからの応答は正しく処理されていますか?
- 無効な呼び出しを行った場合、検索は失敗しますか?
- サーバーがダウンしたときのタイムアウトについてはどうですか?
いつものもの。;)
質問(最後に;))
この使用例をテストするにはどうすればよいですか?
(できれば js-test-driver を使用することをお勧めしますが、他の JavaScript テスト フレームワークに関する提案は受け付けています)