Ich versuche, die Ausgabe des Child-Prozesses mit Mocha zu testen.
Mein Test sieht so aus:
%Vor% Das Problem, das ich habe, ist, dass it
niemals ausgeführt wird.
Ich könnte den Code tauschen, um die exec
innerhalb der it
zu haben und dann done
, um sicherzustellen, dass die Dinge in der richtigen Reihenfolge laufen, aber das würde bedeuten, dass ich die gleiche Exec ausführen müsste jeder Test, den ich gegen das stdout des Kindes machen möchte.
Wie kann ich mehrere it
-Anweisungen gegen die stdout eines untergeordneten Prozesses haben?
Mocha ist nicht dafür ausgelegt, den in Ihrer Frage angezeigten Code auszuführen. Man könnte sich vorstellen, dass es in zwei Phasen läuft. In der ersten Phase liest es alle Ihre Testdateien und führt sie aus. Die Art, wie es weiß, welche Tests Sie in Ihrer Suite haben, besteht darin, alle Callbacks auf describe
sofort auszuführen, und jedes Mal, wenn es auf it
trifft, werden Datensätze als Test später ausgeführt. In der zweiten Phase führt es die Tests durch. Damit ein Test für Mocha sichtbar ist, muss in der ersten Phase ein Aufruf von it
angezeigt werden. Der Code, den Sie anzeigen, wird dies verhindern.
Wie kann ich mehrere it-Anweisungen gegen den stdout eines Kindprozesses haben?
Es klingt, als würden Sie eine Aussage pro it
anstreben. Ich bin nicht sicher, warum Sie das in Ihrem speziellen Fall tun möchten. Mehrere Behauptungen in demselben Test sind völlig in Ordnung. Auf jeden Fall, wenn Sie es tun müssen, dann könnten Sie einen before
Hook verwenden:
Der an before
übergebene Callback wird vor allen Tests im übergeordneten describe
ausgeführt. Die zu testenden Daten werden in captured_stdout
erfasst und dann können alle Tests darauf zugreifen und dagegen testen.
Jahre später ist Mocha gereift und unterstützt das Testen von asynchronem Code .
Fügen Sie einfach einen Rückruf (normalerweise mit dem Namen done
) zu it()
hinzu und Mocha wird wissen, dass er darauf warten sollte, dass diese Funktion aufgerufen wird, um den Test abzuschließen.