QUnit のテストを始めたばかりで、最初のページで問題が発生しました:S
ASP.NET サービス参照を使用して、html ページでの非同期データ読み込みを利用し、同じプロジェクト内の Web サービスへの参照を作成します。ASP.NET が舞台裏 (ScriptManager コントロール) で行っていることは、サービス メソッドを表す JS ファイルを作成し、すべての AJAX 呼び出しを処理することです。
これを使用して、document.ready jQuery イベントでこれらのメソッドのいずれかを呼び出すページを作成します。現在、QUnit を使用してこの js ファイルに対してテストしようとしていますが、js ファイルで実際の Web サービスを呼び出すことは避け、代わりにモック サービスを使用します。これまでの試みのために私が持っているものは次のとおりです。
main.js (本番コード ファイル)
var Service;
$(document).ready(function () {
//class definition created by asp.net behind the scenes
Service = MyProject.services.DataService;
//the method that calls the service
LoadData();
});
function LoadData() {
Service.GetData(OnGetDataSuccess, OnGetDataFailure);
}
main-test.js (テスト QUnit コード、main.js はこのページで参照されています)
function SetupMockService(result) {
Service = { "GetData": function (OnSuccess, OnFailure) {
GetDataCalled = true;
OnSuccess(result);
//this is required in an asyncTest callback, I think?
start();
}, "GetDataCalled": false};
}
$(document).ready(function () {
module("LoadData");
asyncTest("LoadData should call GetData from service", function () {
SetupMockService(result);
LoadData();
equals(Service.GetDataCalled, true, "GetData has been called");
});
このテストは失敗します。LoadData メソッドは、元の (main.js) document.ready イベントの一部として呼び出されるため、引き続き運用 Web サービスを呼び出しますが、その GetDataCalled 変数が設定されていない (または運用環境で定義されていない) ため、テストは失敗します。私は asyncTest を間違っていますか? (これは QUnit での私の最初の日なので、そうなる可能性が非常に高いです)
これが機能していることを確認できるもう 1 つの方法は、main.js の document.ready イベントをオーバーライドできる場合ですが、その方法についてはよくわかりません。また、本番環境の main.js コードに「testEnvironment == true」チェックを追加したくありません。