mockjaxを使用してjQueryAjax呼び出しをモックしようとしています。ただし、応答を効果的にテストする方法の適切で実用的な例を見つけることができません。
次のコードは、jQuery.Ajaxオブジェクトの単純なラッパーです。それは動作しますが、私はそのようなものの周りにいくつかのテストを書きたいです:
Ajaxラッパー
if (!namespace){
var namespace = {};
}
namespace.Ajax = (function($){
function defaultError(xhr, err, msg){
if (typeof console !== 'undefined'){
var log = console.error;
if (!log) {
log = console.log;
}
log("==========================================");
log("An error occurred with the request.");
log("- Status Code: " + xhr.status);
log("- Status Text: " + xhr.statusText);
log("- Response Text: " + xhr.responseText);
log("- Message: " + msg);
log("==========================================");
}
}
function getData(url, data, successCallback, errorCallback){
if (!errorCallback){
errorCallback = defaultError;
}
$.ajax({
url: url
, data: data
, success: successCallback
, error: errorCallback
});
}
function postData(url, data, successCallback, errorCallback){
if (!errorCallback){
errorCallback = defaultLog;
}
$.ajax({
type: "POST"
, url: url
, data: data
, success: successCallback
, error: errorCallback
});
}
return {
getData : getData
, postData: postData
}
}(jQuery));
getDataに対して次のJsTestDriverテストがあります。
テストクラス
TestCase("Ajax Object Test Fixture", {
"test Calling getData Should Return content" : function(){
var results;
var obj = namespace.Ajax;
$.mockjax({
url: "/test"
, responseTime: 1
, responseText: "success"
});
obj.getData("/test"
, null
, function(data){results = data; });
setTimeout(function(){assertEquals("'success' Should be Returned.", "success1", results);}, 500);
}
});
この例では、「success1」を期待しているため、assertEquals関数はfalseを返す必要がありますが、コード全体で値を「success」に設定しようとしています。このテストを失敗させたいので、機能していることがわかります。それでも、テストは成功します。イベントでsuccessCallback関数を設定しようとしましたがresults = "success"
、それでもテストに「失敗」しません。
現在の誤検知が発生しないように、模擬応答が返されるようにこのテストを設定するにはどうすればよいですか?