2
在源代碼中,我有一個getJSON調用,在以下結構中有兩個成功回調。無法窺探茉莉花單元測試中ajax的交錯成功回調
的源代碼進行測試:
jsonMakeLineOrderData = $.getJSON(url, jsonData,
function (data) {
console.log("Inside 1st callback");
//… some other statement
}).success(function (data) { // line# 1
console.log("Inside 2nd callback");
//… some other statement
});
我用的茉莉測試框架來測試這一呼籲的成功塊。
爲了僞造/模擬ajax調用,我使用了spyOn實用程序。
我的茉莉花測試規範:
it ("Test Function",function(){
var data = <json_data>;
var d;
spyOn($, "ajax").andCallFake(function(params) {
params.success(data); // line# 2
d = $.Deferred();
d.resolve(data);
return d.always();
});
});
在上面的例子我能考第一,但回調無法測試第二個回調。
由於測試規範中的第2行,第1個回調正在執行。
我曾嘗試使用jQuery延遲的實例來執行第二個回調,但它拋出「類型錯誤:$ .getJSON(...)的成功不是一個函數」錯誤,如果我改變 .success ()聲明到 .done()在第1行的源文件中測試用例工作正常,但我無法使其與 .success()一起工作,但不幸我不想改變源文件,所以我必須使用 .success()。
如果有人有任何解決方案,請讓我知道。
在此先感謝。
我已經使用了與您建議的相同的語法 – Learner
謝謝Andreas的迴應。 我已經使用了與以下提供的實際數據相同的語法。 spyOn($,「getJSON」)。return({success:function(c){c(testData)}}); 但是得到以下錯誤 _italic_ TypeError:spyOn(...)。return不是一個函數 我可能會犯一些錯誤,但我不確定我在做錯什麼。 – Learner
我的錯''和'返回''不只是'返回',更新了我的答案。 –