В настоящее время я использую 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 перехватил его, но я не уверен, как это исправить.