Następujące dwa sposoby implementacji ajaxRequest (1) (2) powinny być równoważne.
Mimo, że:Jak śledzić żądanie jQuery AJAX?
- Dlaczego testów jednostkowych (3), który weryfikuje zwrotnego został stracony, udaje się (1), a nie w (2)?
- W jaki sposób powinienem przepisać test (3) w celu sprawdzenia oddzwaniania powodzenia w (2)?
- Jeśli spróbuję użyć
stub jQuery.ajax
używając sinon i kodu (2) otrzymuję błąd. Jak mam to naprawić?
Proszę zobaczyć komentarze w kodzie (3), aby uzyskać więcej informacji.
(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
});
+1 dzięki za solucji. Właściwie teraz chciałbym napisać test (3), aby uruchomić go na kodzie (2). Czy masz pomysł, jak to zrobić? Zaktualizowałem moje pytanie. dzięki. –
Wygląda na to, że wywołanie .success() będzie przestarzałe w jQuery 1.8. Sugeruję, że zamiast używać jaśminu, aby sfingować metodę ajaxową, patrzysz na sinon.js (http://sinonjs.org/), która faktycznie kpi z macierzystej XHR twojej przeglądarki. Działa świetnie dla mnie. – badunk
Próbowałem 'stub jQuery.ajax', zobacz moje pytanie, kod (4). I dostaję i błąd, dlaczego? jaki przykład "sinonjs.org" powinienem dostać? –