【发布时间】:2012-08-23 08:50:52
【问题描述】:
下面两种实现ajaxRequest(1)(2)的方式应该是等价的。
话虽如此:
- 为什么验证回调的单元测试(3)执行,(1)成功,(2)失败?
- 我应该如何重写测试 (3) 以监视 (2) 中的成功回调?
- 如果我尝试使用 sinon 和代码 (2)
stub jQuery.ajax,我会收到错误消息。我应该如何解决它?
请参阅代码 (3) 中的 cmets 了解更多详情。
(1)
ajaxRequest: function (message, callback) {
return $.ajax({
url: backendRouter.generate('feedback_send'),
type: 'POST',
dataType: 'json',
data: {
message: message
},
success: callback
});
}
(2)
ajaxRequest: function (message, callback) {
return $.ajax({
url: backendRouter.generate('feedback_send'),
type: 'POST',
dataType: 'json',
data: {
message: message
}
}).success(callback);
}
(3)
it("should execute the callback function on success", function () {
spyOn($, "ajax").andCallFake(function(options) {
options.success();
}); // If I use the code (2) I get the following error
// TypeError: Object #<Object> has no method 'success'
var callback = jasmine.createSpy();
ajaxRequest('some message', callback);
expect(callback).toHaveBeenCalled();
});
(4)
it("makes a GET request for todo items", function () {
sinon.stub(jQuery, 'ajax');
backendController.ajaxRequest('some message', sinon.spy());
// Cannot call method 'success' of undefined
});
【问题讨论】:
标签: javascript jquery jasmine