2017-05-02 1 views
0

Wir verwenden das Karma-Pact-Plugin zum Ausführen unserer Pact JS-Client-Tests, basierend auf dem Beispiel https://github.com/pact-foundation/pact-js/blob/master/karma/mocha/client-spec.js.Ermitteln, wann der Karma-Pact-Mock-Server gestartet wurde

In dem Beispiel gibt es eine Zeitüberschreitung in der before(), ich glaube, dass der Schein-Service vor dem Ausführen der Tests gestartet wurde (siehe Kommentar "erforderlich für langsamere Travis CI-Builds").

Ich zögere, ein festes Timeout in unseren Tests zu setzen, da es entweder zu kurz oder zu lang in verschiedenen Umgebungen ist (zB CI vs. lokal) und so suchte ich nach einer Möglichkeit zu überprüfen, ob der Server es hat gestartet.

Ich habe versucht, die Pakt-API https://github.com/pact-foundation/pact-node#check-if-a-mock-server-is-running zu verwenden, jedoch scheint dies einen neuen Mock-Server zu starten, der mit dem vom Karma-Pact-Plugin gestarteten Fehler in Konflikt gerät (ein Fehler: Kill-ESRCH-Fehler wird gemeldet, wenn Pact ausgeführt wird. createServer(). läuft von innerhalb eines Tests).

Gibt es eine Möglichkeit festzustellen, ob der Mock-Server z. indem Sie darauf warten, dass eine URL verfügbar wird? Möglicherweise gibt es eine Möglichkeit, einen Verweis auf den Pseudo-Server zu erhalten, der mit dem Karma-Pact-Plugin gestartet wurde, um die Pact-Node-API zu verwenden.

Antwort

0

Eigentlich ist der einfachste Weg zu warten, bis der Port benutzt wird.

Karma Pact Standardmäßig wird der Mock am Port 1234 gestartet (und Sie können Ihre eigenen angeben). Sobald der Port verfügbar ist, wird der Dienst ausgeführt und Sie können fortfahren.

Zum Beispiel Sie so etwas wie wait-for-host verwenden könnte den Lauf Mock-Service zu erkennen:

var waitForPort = require('wait-for-port'); 

waitForPort('localhost', 1234, function(err) { 
    if (err) throw new Error(err); 
    // ... Mock Service is up - now we can run the tests 
}); 
+0

Interessante Idee, werde ich das versuchen. Habe ich richtig gedacht, dass es die (kleine) Möglichkeit gibt, dass die [isPortAvailable-Funktion] (https://github.com/pact-foundation/pact-js/blob/master/src/common/net.js) die Port, während der Mock-Server versucht, zu starten, und verhindern, dass der Mock-Server gestartet wird? –

+0

Eigentlich ist diese Funktion das genaue Gegenteil von dem, was Sie wollen - ganz richtig. Es wird tatsächlich verwendet, um festzustellen, ob der Port frei ist, bevor der Server gestartet wird. Hoffentlich bekommst du die Idee! Ich werde die Antwort aktualisieren –

+0

Richtig, es ist das Gegenteil, das wir suchen zu tun. Ich habe ein nagendes Gefühl mit dieser Methode kann dazu führen, dass der Schein-Server nicht gestartet werden kann (wie die Überprüfung öffnet Port 1234, wenn auch kurz). –

Verwandte Themen