Ich verwalte einen Code, der Zeichenfolgen ablehnt, und dies führt beim Testen zu Problemen. Meine Bluebird-Fänge verhalten sich nicht richtig.
bluebird.rejects('Something')
.catch(e => e === 'Something' /* true */, () => console.log(typeof e) /*string*/)
.catch(() => console.log('should not be here'));
Bei Verwendung von sinon.stub().usingPromise('bluebird').rejects('Something');
jedoch ein Fehlerobjekt mit dem Namen Something erstellt. Überhaupt nicht erwartet.
Bevor jemand sagt, dass wir nur native Versprechen unterstützen, wollen wir untersuchen, was sie tun!
Promise.reject('Something')
.catch(e => {
console.log(e === 'Something'); // true
console.log(typeof e); // string
});
Hmmm, sie erstellen keine Fehlerklasse, sie werfen nur die Ausnahme, die sie gegeben hat, wie einen Wurf.
try {
throw 'Something';
} catch (e) {
console.log(e === 'Something'); // true
console.log(typeof e); // string
}
Bevor jemand sagt, dass wir nur native Versprechen unterstützen, wollen wir untersuchen, was sie tun!
Das ist ein Strohmann-Trugschluss . Sie wissen genau, dass wir Versprechen-Bibliotheken unterstützen, wie Sie sie in Ihrem Beispiel verwenden.
Die Sinon-Betreuer wissen genau, wie JavaScript-Versprechen funktionieren, einschließlich der Tatsache, dass Promise.reject()
alles weitergibt, was Sie an ihn weitergeben.
Ich verwalte einen Code, der Zeichenfolgen ablehnt
Meiner Meinung nach ist das Ablehnen von Versprechungen mit String
anstelle von Error
ein schlechter Dienst für Future Developer, der debuggen muss, was wir heute schreiben. Strings sind für das Debuggen nicht sehr nützlich, da sie keine Stack-Traces erfassen. Error
dagegen schon. Daher denke ich, dass rejects()
Verhalten wünschenswert ist, da es einfach ist, den Debugger zu verwenden, um schnell herauszufinden, was schief gelaufen ist.
Es scheint, dass Sie nicht einverstanden sind, aber die einzige Aussage, die Sie gemacht haben, ist, dass Sinon Ihre Erwartungen nicht erfüllt. Wenn Sie der Meinung sind, dass das Standardverhalten geändert werden sollte, geben Sie bitte Argumente dafür an, warum die Änderung möglicherweise viele Benutzer betrifft.
Wenn es solide Argumente für die Änderung des Standardverhaltens gibt, kann ich mir nicht vorstellen, dass einer der Betreuer von Sinon eine Pull-Anfrage zur Änderung ablehnen würde.
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
Ich würde sagen, es könnte unterschiedliche Meinungen darüber geben, ob ein Stack-Trace in bestimmten Szenarien tatsächlich nützlich ist oder nicht. In meiner speziellen Situation ist mir die Stapelverfolgung eigentlich egal, ich kümmere mich nur um die Fehlermeldung und übergebe sie dann an eine andere Stelle. Daher habe ich Code geschrieben, um sowohl Ablehnungsgründe für Zeichenfolgen als auch für Fehler zu behandeln. Da sinon jedoch den String -> Error-Zwang für mich ausführt, kann ich den Zweig meines Codes, der Strings verarbeitet, nicht testen. Als solches kann ich keine vollständige Abdeckung erhalten
Stack-Trace-Nützlichkeit und Diskussionen darüber, ob man Fehlerobjekte beiseite legen sollte, stimme ich im Allgemeinen zu
const example = sinon.stub().rejects(something);
sollte sich genauso verhalten wie
const example = () => Promise.reject(something);
Derzeit ist dies nicht der Fall, wenn something
eine Zeichenfolge ist. Ich würde sagen, das aktuelle Verhalten ist ein Fehler.
Genau.
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
Hilfreichster Kommentar
Stack-Trace-Nützlichkeit und Diskussionen darüber, ob man Fehlerobjekte beiseite legen sollte, stimme ich im Allgemeinen zu
sollte sich genauso verhalten wie
Derzeit ist dies nicht der Fall, wenn
something
eine Zeichenfolge ist. Ich würde sagen, das aktuelle Verhalten ist ein Fehler.