Ich verwende CSSTransitionGroup
, um ein Element zu animieren, wenn es im DOM erscheint oder wenn es das DOM verlässt. Es läuft gut.Deaktivieren Sie die CSSTransitionGroup von React im Test
Jetzt - ich möchte Unit-Test diese Komponente. Ich erstelle einen temporären DOM-Knoten und füge ihn an die <body>
an, ich rendere meine Komponente hinein und führe dann einige Aktionen aus. Als Ergebnis erwarte ich, dass ein untergeordneter DOM-Knoten verschwindet.
Das Problem: Animationsklassen werden angewendet, und die Komponente bleibt im DOM, bis die CSS-Animationen enden. Dies bedeutet, dass mein Test auch einige hundert Millisekunden warten sollte, bevor ich behaupten kann, dass dieses Element weg ist. Ich kann das nicht - ich möchte, dass meine Tests schnell sind, da es sich um Unit-Tests handelt.
Die Frage: Gibt es eine Möglichkeit, CSS-Übergänge zu deaktivieren, ohne zusätzliche Optionen zu meiner Komponente hinzuzufügen?
Was ich versucht habe: Unit-Tests selbst funktioniert gut. Ich kann Animationen loswerden, indem ich einen Parameter an meine Komponente übergebe, der dafür sorgt, dass CSSTransitionGroup
nicht verwendet wird. Also - Worst-Case-Szenario - werde ich genau das tun. Aber ich suche nach einer besseren Lösung.
Ich könnte auch behaupten, dass "-enter"/"- enter-active"/"- leave"/"- leave-active" Klassen auf einem fraglichen Element vorhanden sind. Das scheint ein bisschen hacky zu sein, da ich mir einen Fehler vorstellen könnte, bei dem diese Klassen angewendet werden, aber das Element im DOM bleiben würde. Ich möchte lieber nicht auf diesen Ansatz zurückgreifen.
Sie könnten die Komponente verspotten. Wenn Sie Jest verwenden, können Sie ['ReactTestUtils.mockComponent'] (https://facebook.github.io/react/docs/test-utils.html#mockcomponent) verwenden. Ich würde nicht die Funktionalität von 'CSSTransitionGroup' direkt testen. – Aaron
Wie wäre es mit Money Patching reagieren Komponente beim Ausführen der Tests? und dann deaktivierst du CSSTransitionGroup dort. – goldylucks
Ich habe das am Ende gemacht @AdamGoldman. Du hast mich daran erinnert, dass ich hier wahrscheinlich meine eigene Frage beantworten sollte. – kamituel