Demystifying JavaScript Testing

Avatar of Kent C. Dodds
Kent C. Dodds on

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Viele Leute haben mich verwirrt angeschrieben, wo sie mit dem Testen anfangen sollen. Genau wie bei allem anderen in der Software arbeiten wir hart daran, Abstraktionen zu schaffen, um unsere Arbeit zu erleichtern. Aber das Ausmaß der Abstraktion entwickelt sich im Laufe der Zeit weiter, bis die Einzigen, die sie *wirklich* verstehen, diejenigen sind, die die Abstraktion überhaupt erst erstellt haben. Alle anderen müssen die Begriffe, APIs und Werkzeuge einfach hinnehmen und kämpfen, um die Dinge zum Laufen zu bringen.

Eine Sache, an die ich bei Abstraktionen im Code glaube, ist, dass die Abstraktion *keine* Magie ist – sie ist Code. Eine weitere Sache, an die ich bei Abstraktionen im Code glaube, ist, dass es am einfachsten ist, durch Tun zu lernen.

Stellen Sie sich vor, ein weniger erfahrener Ingenieur nähert sich Ihnen. Er ist wissbegierig, möchte sich seines Codes sicher sein und ist bereit, mit dem Testen zu beginnen. 👍 Sie sind bereit, von Ihnen zu lernen, und haben eine Liste von Begriffen, APIs und Konzepten aufgeschrieben, die Sie ihm erklären sollen.

  • Assertion (Behauptung/Bestätigung)
  • Testing Framework (Test-Framework)
  • Die Funktionen describe/it/beforeEach/afterEach/test
  • Mocks/Stubs/Test Doubles/Spies (Test-Doubles: gefälschte Objekte/Funktionen für Tests)
  • Unit/Integration/End to end/Functional/Accessibility/Acceptance/Manual testing (Einheitentests/Integrationstests/End-to-End-Tests/Funktionstests/Barrierefreiheitstests/Akzeptanztests/Manuelle Tests)

Also…

Können Sie diese Definitionen für den angehenden Ingenieur parat haben? Können Sie den Unterschied zwischen einer Assertion-Bibliothek und einem Testing-Framework erklären? Oder ist es Ihnen leichter, sie zu *erkennen* als zu *erklären*?

Hier ist der Punkt. Je besser Sie diese Begriffe und Abstraktionen verstehen, desto effektiver werden Sie sie vermitteln können. Und wenn Sie sie vermitteln können, **werden Sie auch effektiver darin, sie zu nutzen.**

Hier kommt ein Moment, in dem ein Ingenieur "fischen lernt". Wussten Sie, dass Sie Ihre *eigene* Assertion-Bibliothek und Ihr *eigenes* Testing-Framework schreiben können? Wir betrachten diese Abstraktionen oft als jenseits unserer Fähigkeiten, aber das sind sie nicht. Jede der beliebten Assertion-Bibliotheken und Frameworks begann mit einer einzigen Codezeile, gefolgt von einer weiteren und dann noch einer. **Sie brauchen keine Werkzeuge, um einen einfachen Test zu schreiben.**

Hier ist ein Beispiel:

const {sum} = require('../math')
const result = sum(3, 7)
const expected = 10
if (result !== expected) {
  throw new Error(`${result} is not equal to ${expected}`)
}

Packen Sie das in ein Modul namens test.js und führen Sie es mit node test.js aus, und *schwuppdiwupp*, Sie können damit beginnen, sich darauf zu verlassen, dass die sum-Funktion aus dem math.js-Modul wie erwartet funktioniert. Lassen Sie das auf CI laufen, und Sie können sicher sein, dass es nicht kaputt geht, wenn Änderungen am Code vorgenommen werden. 🏆

Sehen wir uns an, wie ein Fehler bei diesem Beispiel aussehen würde

Terminalfenster mit einer Fehlermeldung, die besagt, dass -4 nicht gleich 10 ist.

Offensichtlich subtrahiert unsere sum-Funktion, anstatt zu addieren, und wir konnten dies automatisch mit diesem Skript erkennen. Alles, was wir jetzt tun müssen, ist, die sum-Funktion zu reparieren, unser Testskript erneut auszuführen und

Terminalfenster, das zeigt, dass wir unser Testskript ausgeführt haben und keine Fehler protokolliert wurden.

Fantastisch! Das Skript wurde ohne Fehler beendet, also wissen wir, dass die sum-Funktion funktioniert. Das ist das Wesen eines Testing-Frameworks. Es gibt noch viel mehr dazu (z. B. schönere Fehlermeldungen, bessere Assertions usw.), aber dies ist ein guter Ausgangspunkt, um die Grundlagen zu verstehen.

Sobald Sie verstehen, wie die Abstraktionen auf fundamentaler Ebene funktionieren, werden Sie sie wahrscheinlich nutzen wollen, denn hey, Sie haben gerade gelernt zu fischen und können jetzt angeln gehen. Und uns stehen einige ziemlich phänomenale Angelwerkzeuge zur Verfügung. Mein Favorit ist die Jest Testplattform. Sie ist erstaunlich leistungsfähig, voll ausgestattet und ermöglicht es mir, Tests zu schreiben, die mir die Sicherheit geben, die ich brauche, um Dinge beim Ändern von Code nicht kaputt zu machen.

Ich finde, dass Grundlagen so wichtig sind, dass ich ein ganzes Modul darüber auf TestingJavaScript.com aufgenommen habe. Dies ist der Ort, an dem Sie die intelligente und effiziente Methode zum Testen jeder JavaScript-Anwendung erlernen können. Ich bin wirklich zufrieden mit dem, was ich für Sie erstellt habe. Ich denke, es wird Ihr Verständnis von Testwerkzeugen und Abstraktionen beschleunigen, indem es Ihnen die Möglichkeit gibt, Teile von Grund auf zu implementieren. Das (hoffentlich) Ergebnis? Sie können beginnen, wartbare Tests zu schreiben, die Tag für Tag Vertrauen in Ihren Code schaffen. 🎣

Der Frühbucherrabatt läuft gerade! 40% Rabatt auf jede Stufe! Der Verkauf endet in den nächsten Tagen, also greifen Sie schnell zu!

TestingJavaScript.com – Lernen Sie die intelligente, effiziente Methode, jede JavaScript-Anwendung zu testen.

P.S. Versuchen Sie dies: Tweeten Sie, was ist der Unterschied zwischen einem Testing-Framework und einer Assertion-Bibliothek? In meinem Kurs werde ich ihn nicht nur erklären, sondern wir werden unseren eigenen bauen!