我正在为post方法调用外部API方法,但无法使用茉莉花掩盖它。
我已经使用window对象模拟了外部API函数,并创建了一个通过返回一些对象来模拟回调的函数。但是没有帮助。
JavaScript
function loadApi() {
extAPI.load({
email: 'testEmail.test.com'
}, function(resultObject) {
if(resultObject.approved) {
// callback with result object - not able to cover this
}
});
}
Spec.js和模型
beforeEach(function() {
function mockLoadCallback() {
var object = {
approved: false
};
return object;
}
widnow.extAPI = {
load: function(object, Function) {
var deferred = $.Deferred();
deferred.resolve(mockLoadCallback);
return deferred.promise();
}
}
});
it('load the external API response', function() {
var loadSpy = spyOn(extAPI, 'load');
loadApi();
expect(loadSpy).toHaveBeenCalled();
});
应当涵盖加载回调中的陈述和逻辑,但甚至不能在间谍之后进行调用。我在这里做错了什么。
答案 0 :(得分:0)
在调用spyOn`之后,您缺少.and.callThrough()
。您的测试应如下所示:
it('load the external API response', function() {
var loadSpy = spyOn(extAPI, 'load').and.callThrough();
loadApi();
expect(loadSpy).toHaveBeenCalled();
});
callThrough
方法可确保在调用间谍程序之后,间谍程序将其委托给原始行为。