Las dos formas siguientes de implementar un ajaxRequest (1) (2) deben ser equivalentes.
Una vez dicho esto:Cómo espiar la solicitud jQuery AJAX?
- ¿Por qué la unidad de prueba (3) que verifica la devolución de llamada se ejecuta, tiene éxito en (1) y falla en (2)?
- ¿Cómo debo volver a escribir la prueba (3) para espiar la devolución de llamada correcta en (2)?
- Si trato de
stub jQuery.ajax
usando sinon y el código (2) me sale un error. ¿Cómo debería arreglarlo?
Por favor, vea los comentarios en el código (3) para más detalles.
(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 gracias por su recorrido. De hecho, ahora me gustaría escribir una prueba (3) para ejecutarla en el código (2). ¿Tienes alguna idea de cómo hacerlo? Actualicé mi pregunta Gracias. –
Aparentemente, la llamada .success() quedará obsoleta en jQuery 1.8. Sugiero que en lugar de utilizar jazmín para burlarse del método ajax mires a sinon.js (http://sinonjs.org/) que realmente se burlará del XHR nativo de tu navegador. Funciona muy bien para mí. – badunk
Traté de 'stub jQuery.ajax', vea mi pregunta, el código (4). Y entiendo y error, ¿por qué? ¿Qué ejemplo de 'sinonjs.org' debo obtener? –