Scherz reagieren-Prüfung: Check Status nach Verzögerung
Bin ich wirklich verwirrt zu schaffen versucht-test mit Hilfe des Scherzes Dokumentation https://facebook.github.io/jest/docs/timer-mocks.html#content
Ich versuche zu prüfen, ein Zustand, wenn die container mountet und dann wenige Sekunden später, nachdem ich manuell eingestellte Werte in den Zustand (mit setTimeout()).
Ich habe eine Funktion innerhalb von Main componentDidMount wie diese:
componentDidMount() {
this.setStateAfterDelay();
}
Ist und was die Funktion tut, ist:
setStateAfterDelay = () => {
setTimeout(() => {
this.setState({ fruits: ['banana', 'apple', 'orange', 'vodka', 'kiwi'] });
}, 1500);
}
Erreichte ich den ersten Teil mit:
const component = mount(<Main />);
expect(component.state().fruits).toEqual(null);
Aber ich habe keine Ahnung, wie Sie überprüfen den Zustand wieder nach, sagen wir 2000ms?
Jede Hilfe ist willkommen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich nicht wirklich getestet, dieser code. Aber, etwas ähnliches wie das funktionieren sollte, denke ich.
während Scherz ausführen können async-code einfach, können Sie Versprechen und setTimeout Kombination ein bisschen zu warten. Zum Beispiel dieser code wird warten für 2 Sekunden:
Vollständige Probe-test. Vergessen Sie nicht, fügen Sie
async
Flagge, bevor die callback-Funktion:Beachten Sie auch, dass die Standard - "timeout" 5 Sekunden (5000ms). Wenn Ihr test kann länger laufen, können Sie hinzufügen
jest.setTimeout(30000);
über dietest()
. 30000 wird stellen Sie sicher, dass keine timeout-Wert für 30 Sekunden. Sie können eine beliebige Nummer, die Sie brauchen. Vollständiges Beispiel mit setTimeout:Brauchen Sie nicht zu verzögern, die tests, den Aufruf einfach
jest.runAllTimers()
vor der Geltendmachung, funktionieren wird.Sie auch nennen könnte
useFakeTimers()
imbeforeEach
wenn Sie gehen, um zu testen, mehrfach und auchrunAllTimers()
werden könnte, in einem anderenbeforeEach
so müssen Sie nicht selbst wiederholen.Ich weiß, das ist die Frage, wie um etwas zu prüfen, nachdem 20 Sekunden lang. Aber dies könnte auch ein Indikator dafür, dass Sie nicht wollen, um zu testen, 20 Sekunden da, was manchmal wichtig ist, ob bestimmte Maßnahmen durchgeführt worden mit dem rechten Eingang. In diesem Fall könnten Sie strukturieren Sie Ihre code ein wenig, so dass Sie weitergeben können, in eine dispatch-Funktion. Zum Beispiel
Weil
dispatch
übergeben wird, daher können Sie ganz einfach verwenden Sie die folgenden in das testen von code.Natürlich ist die Annahme, dass Sie nicht zu kümmern, wenn es 20 Sekunden, anstatt Sie kümmern sich mehr um den workflow-Prozess.