Meine derzeitige Situation ist, dass ich grunt verwende, um eine Produktionsversion meiner Express-App zu erstellen (alle js / css minimieren und zusammenführen, alle Dateien an Ort und Stelle kopieren) und dann ein Skript ausführen, das eine Umgebungsvariable setzt (Meine App bedient nur die Testumgebung im TEST-Modus), erstellt eine leere Mongo-Testdatenbank und ruft dann npm start im Anwendungsverzeichnis auf, und dann muss ich manuell die Tests entweder von Chrome oder Phantom ausführen, was ich will Do ist Grunt haben, setzen Sie die Umgebungsvariable und führen Sie den Server, führen Sie die Tests und dann den Server zu stoppen (in der Zukunft, wenn alles erfolgreich ist, wäre es schön, es auch bereitstellen). Wenn ich jedoch versuche, die App grunzen zu lassen, wird sie gestoppt, sobald sie fertig ist.
Wie grunze ich, starte die App, warte bis sie gestartet ist und starte dann Tests?
Wenn Sie grunt-express überprüfen, ist dies ein Plugin für Express-Webserver-Aufgaben über grunt.
express-keepalive
Beachten Sie, dass dieser Server nur so lange ausgeführt wird, wie Grunt ausgeführt wird. Einmal Die Aufgaben von grunt sind abgeschlossen, der Webserver stoppt. Dieses Verhalten kann geändert werden, indem Sie eine Express-Keepalive-Aufgabe am Ende Ihrer hinzufügen Aufgabenliste wie folgt
grunt.registerTask('myServer', ['express', 'express-keepalive']);
Wenn Sie nun myServer starten, wird Ihr Express-Server am Leben erhalten bis Sie es manuell beenden.Diese Funktion kann auch ad-hoc aktiviert werden, indem Sie die Aufgabe wie
grunt express express-keepalive
ausführen.Dieses Design gibt Ihnen die Flexibilität, grunt-express zu verwenden Verbindung mit einer anderen Aufgabe, die unmittelbar danach ausgeführt wird, wie die grunt-contrib-qunit plugin qunit Aufgabe. Wenn wir eine ausdrückliche Aufgabe erzwingen immer asynchron sein, so kann ein solcher Anwendungsfall nicht mehr passieren.
Aus dem Guide grunt-contrib-qunit
package wird Qnit Unit Tests in einer kopflosen PhantomJS-Instanz ausgeführt. Bedenken Sie auch die letzte Zeile, wenn Sie Express zwingen, immer asynchron zu sein, würde es nichts nützen.
npm Link für grunt-express
.
Ich bin mir nicht sicher, ob ich dein Problem richtig verstehe, aber wahrscheinlich hilft das:
Weißt du etwas über die Async-Funktion von Grunt? Für einige Zeit habe ich den folgenden Ansatz verwendet, um meine Express-App zu starten (und zu stoppen). Ich habe es mit Watch verwendet, sodass es beim Speichern automatisch neu gestartet wird. In diesem Fall müssen Sie die Option nospawn von watch auf true setzen.
%Vor%Es ist hässlich wegen diesem Cache-Hack. Es funktioniert jedoch.
Tags und Links unit-testing gruntjs node.js