jambit ToiletPaper 111

Testing a saga made easy

Problem

Ihr kümmert euch gerade um eine Single Page Application mit React? Für das State Management kommt bei euch Redux zum Einsatz? Ihr habt es sogar schon geschafft, eure asynchronen Arbeitsschritte & Seiteneffekte (API Calls, Zugriff auf Browser Caches etc.) mittels redux-saga zu kapseln? Das könnte dann stellenweise ungefähr so aussehen:

Testing a saga made easy

Jetzt fehlt euch eigentlich nur noch ein Schritt zur Meisterschaft: Wie testet man die Pfade/Fälle ab, um sicherzugehen, dass das Ding auch das tut, was es soll?

Lösung

Onkel Jeremy Fairbank hat da was Feines für uns, und es nennt sich redux-saga-test-plan. Mit diesem Spielzeug kann man seine Saga integration testen. D.h. innerhalb eines Testlaufs ist es möglich, die Saga mittels gemockten Redux Actions und speziellen Providern so zu steuern, dass sie einen gewissen Verlauf nimmt (und hoffentlich eine erwartete Redux Action triggert). Wenn man die obige Saga zugrunde legt, könnte ein spezieller Test für den Erfolgsfall also so aussehen:

Beispiel

  • Testing a saga made easy
  • .dispatch steuert, auf welche der "beobachteten" Actions (FETCH_USER_CONFIRMATION_START) reagiert wird.
  • Innerhalb von .provide wird alles gemockt, was den Verlauf der Saga beeinflusst - d.h. jegliche Selektionen aus dem Redux Application State oder Aufrufe von anderen Funktionen.
  • .put legt fest, welche Redux Action erwartet wird. Der Test wird nur grün, wenn diese tatsächlich getriggert wird.

Weiterführende Aspekte

---

Autor: Robert Gruner / Software Engineer / Office Leipzig

Zum Toilet Paper #111: Testing a saga made easy (pdf)

Testing a saga made easy

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.