Karma Unit Tests laufen immer und immer wieder in einer Endlosschleife ab

8

Ich stehe vor diesem Problem, seit ich eine Reihe neuer Direktivtests (in einem JHipster-Projekt) erstellt habe. Die Karma-Unit-Tests werden von einer Grunt-Task ausgeführt. Ich möchte klar hervorheben, dass mein Problem anders ist als diese beiden (und ein paar andere, die ich nicht posten darf), die ich auf GitHub gefunden habe:

Ссылка

Ссылка

Der Unterschied besteht darin, dass Karma niemals die Tests ausführt, sondern sie in einer Schleife ausführt, als ob es eine unendliche Anzahl von Tests am konfigurierten Ort gäbe. Es ist deutlich in der Befehlszeile zu sehen:

%Vor%

Und es geht für immer weiter. Nach fast einer Stunde Ausführung ist dies das Ergebnis:

%Vor%

Es spielt keine Rolle, ob Tests bestanden oder fehlgeschlagen sind oder warum sie fehlschlagen ( TypeError, ReferenceError... ), Tests laufen trotzdem ewig (alle Tests bestehen hier, wie Sie sehen können). Die Ausführung stoppt nur, wenn ich die grunt-Aufgabe in der Befehlszeile stoppe.

Die Karma-Konfiguration und die Grunt-Aufgaben haben sich in den letzten Monaten nicht geändert. Singlerun und Autowatch-Einstellungen (sowie alle anderen) sind irrelevant.

Der zu testende Code scheint irrelevant zu sein. Einige Änderungen, sie haben das Problem für eine Weile verschwinden lassen, aber während ich neue Tests schreibe, kommt es immer wieder zurück. Natürlich dachte ich zuerst, dass mein Code die Schuld wäre, aber das Folgende wird zeigen, warum es keine logische Schlussfolgerung ist.

Das seltsame Verhalten beginnt immer beim Erstellen eines neuen Tests, aber der Testcode selbst scheint irrelevant zu sein, da die neuen Tests niemals spezielle Operationen oder Cover-Komponenten verwenden, die andere Tests nicht verwenden. Selbst wenn der neue Test ein vollständig leerer Funktionskörper ist, führt dies immer noch zu dem seltsamen Verhalten, das darauf hindeutet, dass es kein neuer Entscheidungspfad im Programm ist, der das Problem verursacht, wenn er durch Tests abgedeckt wird. Deshalb glaube ich nicht, dass der Code dafür verantwortlich ist. Ich habe es auch geschafft, die unendliche Ausführung zu stoppen, indem ich zufällige Tests abstellte (die wir schon lange ohne irgendwelche Probleme benutzt haben), aber das Problem kam immer zurück, als ich neue Tests hinzufügte.

Die Umgebung ist irrelevant. Tests laufen unbegrenzt auf meiner Windows-Maschine und in CI auf einem Linux-Server.

Ich dachte auch, dass es vielleicht ein Speicherbegrenzungsproblem ist, weil die Browser für eine Weile bei einem bestimmten Test abgestürzt sind, der nichts mit der neuen Funktion oder den neuen Tests zu tun hat (und seit Monaten einwandfrei funktioniert). Als ich diesen Test abstellte, hörte das Problem für eine Weile auf, kam aber später wieder zurück (da ich weiterhin Tests schrieb).

Ich habe alle NPM-Pakete und Bower-Komponenten auf die neueste Version aktualisiert, aber das hat die Endlosschleife nicht geändert.

Inzwischen habe ich keine Ideen mehr. Ist jemand jemals auf so seltsames Verhalten und Konsolenausgaben gestoßen?

    
user436357 07.06.2016, 14:08
quelle

1 Antwort

5

Wir haben gerade genau dieses Problem behoben. Das Problem war, dass wir in unserer Anwendung eine Abmeldefunktion haben, die verschiedene Aufgaben ausführt, bevor den Browser auf eine andere Seite umleitet . Einer unserer Tests, den wir um unsere Abmeldefunktion hinzugefügt haben, war nicht der Aufruf von window.redirect, und wenn dies durch einen Karmatestlauf ausgeführt wurde, verursachte dies das Schleifenverhalten.

Nach dem Mocking / Spioning dieses Aufrufs wurde das Schleifen beendet.

Nicht sicher, ob das das gleiche Problem ist, das Sie haben, aber hoffentlich werden Ihnen diese Informationen helfen!

    
David de-Vilder 08.06.2016, 10:23
quelle

Tags und Links