Tests abgelehnt Versprechen in Mocha/Chai
Habe ich eine Klasse, lehnt ein Versprechen:
Sync.prototype.doCall = function(verb, method, data) {
var self = this;
self.client = P.promisifyAll(new Client());
var res = this.queue.then(function() {
return self.client.callAsync(verb, method, data)
.then(function(res) {
return;
})
.catch(function(err) {
//This is what gets called in my test
return P.reject('Boo');
});
});
this.queue = res.delay(this.options.throttle * 1000);
return res;
};
Sync.prototype.sendNote = function(data) {
var self = this;
return self.doCall('POST', '/Invoice', {
Invoice: data
}).then(function(res) {
return data;
});
};
In meinem test:
return expect(s.sendNote(data)).to.eventually.be.rejectedWith('Boo');
Jedoch während der test geht es löst mit der Fehlermeldung an die Konsole.
Nicht behandelte Abstoßung Fehler: Boo
...
Mit nicht Versprechen, Fehler, die ich verwendet haben, binden Sie testen, zu verhindern, dass des Fehlers geworfen, bis Chai wickeln konnte und test:
return expect(s.sendNote.bind(s, data)).to.eventually.be.rejectedWith('Boo');
Allerdings funktioniert dies nicht mit diesem und gibt:
TypeError: [Function] is not a thenable.
Was ist der richtige Weg, um dies zu prüfen?
InformationsquelleAutor cyberwombat | 2015-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist der Fehler, weil sendNote wird abgelehnt und Sie sind nicht ansteckend.
Versuchen:
Sieht aus wie Sie haben auch zu bewegen, Ihre bestehenden fangen Sie einen block aus:
Ich denke, es hat zu tun mit der Warteschlange. Wenn ich einfach
return P.reject()
von derdoCall
Funktion funktioniert esAh. Bewegen Sie den fangen einen block heraus.
Ja - habe ich einen Haken auf die
res.delay
Anruf und es funktionierte. Süß! Wenn Sie aktualisieren Sie Ihre Antwort werde ich es markieren.die blockiert dann nichts tut, kann es entfernt werden.
InformationsquelleAutor rrowland
(Disclaimer: Das ist eine gute Frage, auch für Menschen, die nicht mit Bluebird. Ich habe eine ähnliche Antwort hier; diese Antwort wird in der Arbeit für Menschen, die nicht mit Bluebird.)
mit chai-als-versprochen
Hier ist, wie Sie verwenden können, chai-als-versprochen zu testen
resolve
undreject
Fällen für ein Versprechen:ohne chai-als-versprochen
Können Sie den selben Zweck erfüllen, ohne chai-als-versprochen wie dieses:
chai-as-promised
, könnten Sie stattdessen werfen die generierten Fehler in der test-suite..catch(function(e) { throw e });
Sie sind also sehr richtig, ich habe Ihren Vorschlag eingearbeitet. Hoffe du verzeihst mir! 🙂
InformationsquelleAutor fearless_fool
Ich persönlich benutze das idiom:
Dies ist einer der seltenen Fälle
then(onFulfilled, onRejected)
(2 Argumente) ist legitim zu verwenden.Wenn Sie die Kette
.then(reject).catch(onRejected)
wie bereits in anderen Antworten, die Sie am Ende der Eingabe in dercatch
handler jedes mal da wird es zu fangen als auch die Ablehnung produziert in den vorhergehendenthen
handler--was könnte die Ursache evergreen-tests, wenn Sie nicht vorsichtig genug sind, um zu überprüfen, dass Eventualität.InformationsquelleAutor Sylvain Leroux
Ich habe vor dem gleichen problem, aber auf viele hacks ich habe eine Lösung gefunden für die Prüfung abgelehnt verspricht in Mokka.
schreiben Mokka-code wie unten
HINWEIS:- Hoffe, Sie finden es nützlich. Wenn Sie einen anderen Vorschlag haben Kommentar mir ich bin Neuling Erkundung der js Welt
Ich denke mir code ist klarer und kurz mit geben eine Vorstellung zu bekämpfen, anstatt den oben genannten code, die mich verwirrend für mich, wie ich bin ein newbie, kein Experte. Ich stellte diese Antwort so, dass ein anderer Neuling bekommen kann es schnell anstatt zu sehen big-codes.
InformationsquelleAutor Shankar Chaudhary