Wie teste ich eine Grunt-Aufgabe? Verständnis und Best Practices

8

Ich bin ein bisschen damit beschäftigt zu verstehen, wie man komplizierten Gruntfile.js schreibt und benutzt es mit Tests. Benutze ich Grunt richtig? Ich möchte die Gemeinschaft um Hilfe bitten und auf andere Weise dazu beitragen.

Ich schreibe eine neue Aufgabe für Grunt und möchte sie für ein breites Publikum auf Github und npm veröffentlichen. Ich möchte automatisierte Tests für diese Aufgabe machen (und ich möchte lernen, wie man es richtig macht!).

Ich möchte verschiedene Kombinationen von Optionen testen (ungefähr 15). Also sollte ich mehrmals:

  • Bereinigung ausführen
  • führe meine Aufgabe mit den nächsten Optionen aus
  • Führen Sie Tests aus und übergeben Sie das Optionsobjekt an den Test

Einige nicht funktionierende Codes zum besseren Verständnis:

Gruntfile:

%Vor%

Ich weiß, wie überprüft werden kann, ob der tmp/ Ordner im gewünschten Status ist, wenn options Objekt angegeben wurde.

Das Problem besteht darin, Dinge zusammenzusetzen.

Ich würde nur nach Vorlagencode als Antwort fragen, npo muss ein funktionierendes Beispiel geben.

PS: Sie können ein anderes Testwerkzeug vorschlagen, Knoteneinheit ist kein Muss.

PPS: Mist, ich hätte das jetzt einfach in Javascript schreiben können! Vielleicht mache ich es falsch, dass ich Grunt in die Unit-Tests aufnehmen möchte? Aber ich möchte testen, wie meine Aufgabe in der realen Umgebung mit verschiedenen Optionen funktioniert, die von Grunt übergeben werden ...

    
Dan 12.12.2013, 11:30
quelle

2 Antworten

9

Vielleicht möchten Sie sich die grunt-lintspaces Konfiguration. Die Tests sehen so aus , und es sieht nach einem guten aus Weg, es zu tun. Grunt-Lintspaces verwendet Knoteneinheit, aber viele Plugins scheinen in diesen Tagen.

Wenn Sie die tatsächliche Grunt-Ausgabe und stattdessen die Funktionalität nicht testen möchten, können Sie grunt-mocha-test verwenden - Ссылка , die ich für the grunt- verfügbare Aufgaben Tests . Ich bevorzuge den beschriebenen Stil des Tests persönlich, es liest sich sehr gut; Der Vorteil bei der Verwendung ist, dass Sie tatsächlich testen, was Ihr Plugin tut, ohne eine Tonne von Config in Ihre Gruntfile aufzunehmen; h. Testcode sollte in den Tests sein.

Grunt ist bereits gut getestet, daher ist es nicht sinnvoll zu testen, ob seine Konfiguration funktioniert. Testen Sie einfach die Funktionalität Ihres eigenen Plugins.

    
Ben 12.12.2013 11:53
quelle
1

Was Sie tun möchten, ist black-box / integration / end-to-end, und / oder die "Rauch" -Tests . Es ist eine sehr gute Idee, solche Tests + Unit-Tests Ihres Plugins zu haben (unabhängig vom Grunt, wie andere Antworten vorschlagen).

Wie überprüfen Sie normalerweise neben den Unit-Tests, ob die App auf der obersten Ebene als Ganzes funktioniert? Normalerweise durch Lesen der Konsolenausgabe, durch Überprüfen des Dateisystems (Überprüfung, dass die Dateien erstellt wurden), im Allgemeinen durch Erfassen der Interaktionen mit der Außenwelt. Zum Beispiel produziert nodeunit XML-Dateien, und wenn Sie etwas in Ihrem Code brechen, sollte der Status-Exit von grunt nodeunit ungleich Null sein, und wenn die Tests bestanden werden, sollte der Status 0 sein.

Bei dieser Art von Tests möchten Sie nicht wirklich wissen, wie Ihre Anwendung auf der untersten Ebene funktioniert (wie bei Unit-Tests), sondern , wenn etwas kaputt geht Auf jeder Ebene möchten Sie es nicht verpassen und wahrscheinlich dann möchten Sie die Details sehen, mit denen Sie den Fehler (zumindest) manuell reproduzieren können.

  

TIPP: Es ist sicher keine gute Idee, mehr Unittests zu schreiben (wie das Umbrechen von Bash-Aufrufen in Javascript und das Ausführen von I / O-Operationen)

In meinem Fall habe ich, abgesehen von gewöhnlichen Unit-Tests, kürzlich eine Strategie für die Rauchprüfung gefunden, die sehr nützlich ist.

Mit einer einfachen Hilfsdatei kann man ein "Test-Framework" erstellen :) (in meiner echten Version fügt es ANSI-Farben, Einkerbungen usw. hinzu, aber das ist hier nicht wichtig.)

%Vor%

Dann schreibe ein paar Rauchtests:

%Vor%

Es ist keine schlechte Idee, manchmal ein Referenzprojekt zu erstellen: ein Projekt, das ein künstlicher Benutzer Ihres Plugins ist. Ich könnte simplistic package.json (die einen Link zu Ihrem Plugin hat), Gruntfile.js, einige "foo" -Implementierung, "foo unitests" usw. enthalten. Dann können Sie dieses Projekt in den Rauchtests verwenden.

    
Adam 24.11.2015 11:28
quelle