Ich verwende React für Render und Jest/Jasmine für Test. Ich habe Test geschrieben mit alten Jest/Jasmine waitsFor
und runs
aber diese sind jetzt in Jasmine 2 und ich bin mir nicht sicher, wie man mit neuen done
asyncs ersetzen.Wie verwende ich Jest zum Testen reagierte gerenderte asynchrone Daten?
In meinem Code gibt React eine kleine Seite über einen Benutzer aus. Diese Seite hat einen AJAX-Aufruf, um Benutzerposts abzurufen. Ich möchte testen, dass Benutzer Beiträge wieder schön kommen, und waitsFor
war sehr, sehr gut in diesem: warten, bis der Benutzer einige Post hat, dann weiter.
Ich schaute online auf viele Leute, die über die Verwendung von AJAX-Anrufe innerhalb Jest Test sprechen, was nicht das ist, was ich will. Mein Jest-Test hat keine Ahnung, wie ein AJAX-Anruf zustande kommt, also muss ich warten, bis die Ergebnisse zurückkommen.
Hier ist meine aktuellen Code mit waitsFor
und runs
:
it('loads user post',() => {
var page = TestUtils.renderIntoDocument(
<UserPage params={{user: 'fizzbuzz', 'pass': 'xxx'}} />
);
waitsFor(() => {
return page.state.posts.length > 0;
}, "post loaded", 10000);
runs(() => {
var posts = TestUtils.scryRenderedDOMComponentsWithClass(page, 'post');
expect(posts.length).toEqual(10);
});
});
Wie kann ich die waitsFor
und runs
löschen und mit Jasmin 2.0-Code ersetzen, das funktioniert? Alle Jest-Test wissen, dass page.state.posts.length
größer als 0 sein muss, bevor expect
irgendwas.
Entschuldigung für meine langsame Rückkehr! Vielen Dank! Ich habe eine Upvote hinzugefügt, weil ich denke, dass Sie in die richtige Richtung sind. renderIntoDocument ist kein eigener Code, sondern Code von React. Es macht meine React-Komponenten so, als wären sie echt gemacht. Render in React bewirkt, dass Ajax passiert und ich versuche sicherzustellen, dass der Ajax korrekt abgeschlossen wurde. Das war im alten Jasmine möglich, weil Ajax die interne React-Komponente vervollständigen konnte und ich den Wert im Test überprüfe. Aber in Jasmine 2 bisher nicht möglich. – FizzBuzz
@FizzBuzz keine Sorgen - vielen Dank für die Rückkehr zu mir! Ich sehe, offensichtlich ein wenig im Dunkeln mit React im Moment. Wenn es sich jedoch um eine native React-Funktion handelt, würde ich davon abraten, diese Logik zu testen, da sie bereits von den Entwicklern, die diese Funktion schreiben, getestet werden sollte (dh Autoren reaktivieren) - bleibe dabei, deine eigene Logik jenseits (vor und nach) dieser Funktion zu testen , anstatt ihre Funktionalität direkt zu testen. Das würde ich sowieso empfehlen. Entschuldigung, wenn ich das aber falsch verstanden habe - wie gesagt, noch nicht auf React gekommen bin. – Shakespeare