Wie entscheide ich, welches Testframework verwendet werden soll?

8

Die Situation ist dies.

Ich bin ein Junior-Entwickler für ein kleines staatliches IT-Projekt. Wir haben nichts von kontinuierlicher Integration oder einem automatisierten Test-Framework. Aber die Idee ist, so etwas zu entwickeln / unsere Entwicklungsumgebung zu verbessern.

Das Produkt ist ein Datenverarbeitungsalgorithmus, der dem Endbenutzer Informationen über eine Webanwendung anzeigt.

Das Auftauchen ist also eine Menge Arbeit, die das Webapp-Javascript modifiziert. Als solches wollen wir einen Unit-Test für das Javascript implementieren.

Ich habe mir diese Frage zum Stapelüberlauf angesehen, in der verschiedene Frameworks für Unit-Tests für Javascript beschrieben werden.

Die Frage ist: Wie entscheide ich mich für ein Framework?

  • Was ist eine Liste von Kriterien für die Auswahl eines Testframeworks?
  • Ist es praktisch, sie alle auszuprobieren?
  • Verbringen Sie viel Zeit damit, Foren / usw. darüber zu lesen, wie sie verwendet werden?
Dwjohnston
quelle

Antworten:

13

Was ist eine Liste von Kriterien für die Auswahl eines Testframeworks?

1) Syntax

Wenn Sie verschiedene Test-Frameworks untersuchen, werden Sie feststellen, dass die Syntax ein Differenzierungsfaktor für alle ist. Dies hängt wirklich davon ab, wie Sie sich wohl fühlen.

Beispielsweise ist qUnit eher ein deklaratives Testframework . Die API besteht aus Funktionen namens test, equals, strictEqual, deepEqual usw.

Ein anderes Test-Framework, Mokka , ähnelt eher rspec, da es eine satzähnlichere Struktur enthält. Seine API besteht aus Funktionen namens "beschreiben", "it", "assert.equal" usw.

Meine persönliche Präferenz ist eine Qunit-ähnliche Struktur.

2) Funktionen - Stubs, Spione, gefälschter Server, gefälschte Uhr usw.

Wenn Sie mit dem Testen in Javascript beginnen, befinden Sie sich schnell in Situationen, in denen Sie Ihr Testframework benötigen, um bestimmte Anwendungsfälle testen zu können. Zum Beispiel:

Spione - Auf diese Weise können Sie feststellen, ob Ihr Code eine Funktion aufgerufen hat, wenn dies der Fall sein sollte

Stubs - Sehr ähnlich zu einem Spion, außer dass er vordefiniertes Verhalten enthält (Beispiel: Wenn der Stub aufgerufen wird, geben Sie foo zurück)

Gefälschter Server - Wenn Ihr Code AJAX-Aufrufe ausgibt und Sie die Antwort des AJAX-Aufrufs vortäuschen möchten, hilft Ihnen ein gefälschter Server beim Testen.

Gefälschte Uhr - Wenn Ihr Code je nach Datum oder Uhrzeit unterschiedlich reagiert, können Sie mit einer gefälschten Uhr genau steuern, wie spät es ist, während Ihr Test ausgeführt wird.

Meine Empfehlung für ein Javascript Framework, das alle oben genannten Funktionen unterstützt, lautet Sinon.JS . Da ich eine Qunit wie Syntax und Framework mag, verwende ich qunit AND Sinon.JS. qunit behandelt meine Behauptungen und führt meine Tests durch. Sinon.JS gibt mir die Möglichkeit, zu fälschen, auszuspionieren, einen gefälschten Server zu betreiben und die Uhr zu fälschen.

3) Community-Unterstützung

Wird Ihr Testframework von der Community unterstützt? Beispielsweise unterstützt grunt (ein Build-Umgebungstool) die Ausführung von qunit auf einem kopflosen PhantomJS-Server: https://github.com/gruntjs/grunt-contrib-qunit . Dies macht es einfach, Tests zu schreiben und sie jedes Mal automatisch ausführen zu lassen, wenn ich die Testdatei speichere.

Ist es praktisch, sie alle auszuprobieren? Nein, es ist nicht praktisch. Untersuchen Sie stattdessen die Website jedes Frameworks und wählen Sie eine aus, mit der Sie sich wohl fühlen und die Sie auch bei Ihren Schreibtests unterstützt.

Verbringen Sie viel Zeit damit, Foren / usw. darüber zu lesen, wie sie verwendet werden? Holen Sie sich ein Buch über das von Ihnen ausgewählte Framework und blättern Sie es nach Bedarf durch.

richardaday
quelle