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

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen