我目前正在使用enyo,我在一个组件上有一个函数,它接受一个回调函数并进行ajax调用,然后成功调用回调函数。我似乎无法弄清楚如何监视回调函数。
enyo.kind({
name: 'Login',
isLoggedIn: function (callback) {
$.ajax({
url: '/checkLogin'
})
.done(function (data) {
/* Some logic here */
return callback.apply(null, data); //IF all goes well this should call the spy
})
.fail(function(){/*Fail Stuff*/});
}
....
});
对于我的测试:
describe('Valid User', function() {
var ajaxSpy;
var loginTest = new Login();
beforeEach( function () {
ajaxSpy = spyOn($, 'ajax').andReturn({
done: function (fn ) {
fn();
},
fail: function (){}
});
});
it("should call the callback", function () {
var spy = jasmine.createSpy("spy");
loginTest.isLoggedIn(spy);
expect(spy).toHaveBeenCalled();
});
}
在这种情况下运行回调变得未定义时,我认为这可能是因为ajax间谍拦截它但我不确定如何解决它。
答案 0 :(得分:5)
ajax调用正在做的是返回调用promise
的内容。
您可以在这方面看到各种文章:
但这里的底线是一些关于如何实现这个目标的示例代码:
spyOn( $, 'ajax' ).andCallFake( function (params) {
params.success({foo: 'bar'});
});
spyOn( $, "ajax" ).andCallFake( function (params) {
params.error({foo: "bar"});
});