【发布时间】:2013-07-10 16:02:13
【问题描述】:
在源代码中,我有一个 getJSON 调用和以下结构中的两个成功回调。
要测试的源代码:
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
});
我正在使用 Jasmine 测试框架来测试这个调用的成功块。
为了伪造/模拟 ajax 调用,我使用了 spyOn 实用程序。
我的 Jasmine 测试规范:
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 行,第一个回调正在执行。
我尝试使用 jQuery 延迟实例来执行第二个回调,但如果我更改它会抛出 “TypeError: $.getJSON(...).success is not a function” 错误.success() 语句到 .done() 在源文件的第 1 行测试用例工作正常,但我无法使其工作.success(),不幸的是我不打算更改源文件,所以我必须使用 .success()。
如果有人有任何解决方案,请告诉我。
提前致谢。
【问题讨论】: