Ich habe keine Probleme hatte Aussortieren den Erfolg Zustand spöttisch, aber kann nicht scheinen, zu ergründen, wie die Ausfall/timeout Bedingungen spotten, wenn Sinon und QUnit mit der Funktion zu testen und Ajax:Wie spotze ich eine 'Timeout' oder 'Fehler' Antwort mit Sinon/Qunit?
Mein Set up ist dies:
glücklich und empfangen/die durch die empfangenen Daten an den Erfolg Methode$(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();
}
});
und mein Erfolg Fall Test läuft, ist dies:
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();
});
Allerdings habe ich nicht herausfinden können, was soll ich stattdessen setzen von dies:
xhr.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "responseData": "some test data" }]');
, damit mein Ajax-Call-Handler eine Fehler- oder Timeout-Methode "hört"? Das einzige, was ich denken könnte zu versuchen, war dies:
xhr.requests[0].respond(408);
Aber es funktioniert nicht.
Was mache ich falsch oder was habe ich falsch verstanden? Alle Hilfe sehr geschätzt :)
Timeout ist ein Mangel an Antwort in gegebener Zeit, so dass Sie keine Zeitüberschreitung zurückgeben können –
Ich hoffte, Sinon könnte dies überwinden und eine standardisierte Schnittstelle für alle Arten von Antwort geben. Wenn ich eine Auszeit nicht mit Sinon "zurückgeben" kann - wie mache ich dann eine falsche? –
Ich weiß nicht, Sinon so vielleicht gibt es etwas Spezifisches, aber normalerweise setzen Sie die Zeitüberschreitung um 1ms zu sagen, und verwenden Sie warten auf Server oder Mock-Server-Seite. –