Warum funktioniert die Mocha-Zeitüberschreitung, wenn eine Assertion in einer Q-Zukunft fehlschlägt? In diesem Fall wird auch kein Assertion-Fehler angezeigt. Dies passiert nicht, wenn ich nur Rückrufe verwende. Wie sollte ich dies schreiben, während ich noch Futures verwende, aber den Assertionsfehler anstelle eines Timeouts sehen kann?
%Vor% Der Assertionsaufruf löst eine Ausnahme aus, die von Q abgefangen wird, um die Versprechen korrekt einzuhalten Spezifikation . Mocha erreicht nie done()
, noch wird eine Ausnahme ausgelöst. Sie könnten so etwas tun:
[Bearbeiten] Alternativ können Sie das Argument done
ganz weglassen und das Versprechen direkt aus der Testfunktion zurückgeben. In diesem Fall wird mocha den Test basierend auf dem Ergebnis des zurückgegebenen Versprechens bestanden / nicht bestanden:
... das ist eine nette Möglichkeit, Ihre Testfunktionen zu vereinfachen. Reagiere Taytay an anderer Stelle in diesem Thread, um darauf hinzuweisen.
Mocha unterstützt jetzt Versprechungen in Komponententests, sodass Sie das Versprechen einfach zurückgeben können, anstatt sich auf den Aufruf von (done)
von einem then-Handler zu verlassen. Es ist einfacher und sicherer (weil Sie nicht vergessen werden, fertig zu tun)
Du könntest einfach schreiben:
%Vor%Das würde scheitern, weil das Versprechen fehlschlagen würde, und Mocha würde es entdecken.
Dies ist aus den Mocha-Dokumenten im Abschnitt "Arbeiten mit Versprechen": Ссылка
Verbesserung der Antwort von greim einschließlich callumacrae in einem Kommentar hinzugefügt , können Sie es so machen:
%Vor%