che ho avuto nessun problema smistamento beffardo la condizione di successo, ma non riesco a capire come prendere in giro il/condizioni timeout guasto quando si utilizza Sinon e Qunit per testare e la funzione ajax:Come si simula una risposta "timeout" o "failure" utilizzando Sinon/Qunit?
Il mio set up è questo:
$(document).ready(function() {
module("myTests", {
setup: function() {
xhr = sinon.sandbox.useFakeXMLHttpRequest();
xhr.requests = [];
xhr.onCreate = function (request) {
xhr.requests.push(request);
};
myObj = new MyObj("#elemSelector");
},
teardown: function() {
myObj.destroy();
xhr.restore();
}
});
e la mia prova caso di successo, felicemente in esecuzione e la ricezione/passando attraverso i dati ricevuti al metodo di successo è questo:
test("The data fetch method reacts correctly to receiving data", function() {
sinon.spy(MyObject.prototype, "ajaxSuccess");
MyObject.prototype.fetchData();
//check a call got heard
equal(1, xhr.requests.length);
//return a success method for that obj
xhr.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "responseData": "some test data" }]');
//check the correct success method was called
ok(MyObj.prototype.ajaxSuccess.calledOnce);
MyObj.prototype.ajaxSuccess.restore();
});
Tuttavia, non riesco a capire che cosa dovrei mettendo al posto di questo:
xhr.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "responseData": "some test data" }]');
per far sì che il mio gestore di chiamate ajax "senta" un metodo di errore o di timeout? L'unica cosa che potevo pensare era:
xhr.requests[0].respond(408);
Ma non funziona.
Cosa sto sbagliando o cosa ho frainteso? Tutti gli aiuti molto apprezzati :)
Il timeout è una mancanza di risposta in un dato momento, quindi non è possibile restituire un timeout –
Speravo che il sinon potesse superarlo e fornire un'interfaccia standardizzata per tutti i tipi di risposta. Se non riesco a "restituire" un timeout usando sinon - allora come faccio a fingere uno? –
Non so sinon quindi forse c'è qualcosa di specifico, ma normalmente si imposta il timeout per dire 1ms, e si usa aspettare sul lato server o mock-server. –