2015-01-22 5 views
21

Kontext: Ich habe einen Abnahmetest für meine ember-cli-Anwendung, und der Test wird in Chrome problemlos durchgeführt. In phantomjs schlägt jedoch mein Test fehl - die Benutzeroberfläche wird nicht auf die gleiche Weise erstellt, und ich versuche herauszufinden, warum. (Ich denke, der Test ist wegen https://github.com/ember-cli/ember-cli/issues/1763 gebrochen, aber die allgemeine Frage, wie zu debuggen bleibt)Debuggen von ember-cli-Tests, die in phantomjs ausgeführt werden

In Chrome kann ich die Standard-Debugging-Tools auf meine Tests verwenden und alles ist gut - aber in Phantomjs kann ich mach es nicht mit einem Debugger. Ich sehe auch nicht, dass console.log() Nachrichten in der Ausgabe erscheinen - alles, was ich bekomme, ist eine Liste von Testergebnissen in meinem Terminalfenster.

kann ich sortieren-diagnostische Informationen wie

durch Schreiben Dinge
equal(true, false, "This is a log message"); 

und dann erhalte ich die Meldung als Details für die Behauptung, dass fehlgeschlagen ist, oder ich kann versuchen und herausfinden, was mit

im DOM bin

aber beide von denen a: Stoppt den Test weiter und b: lasst mich nur Informationen aus dem Test selbst protokollieren, nicht meine Anwendung.

Gibt es eine Möglichkeit, meine Tests außerhalb von "Glutentest" auszuführen, oder eine Möglichkeit, die laufenden Testprozesse anzuhängen? Gibt es alternativ eine Möglichkeit, console.log() - Nachrichten in der Ausgabe anzuzeigen?

Antwort

12

Sie können den PhantomJS-Debug-Port verfügbar machen und im Browser öffnen. Dann können Sie an den Breakpoints Ihres Debuggers mit dem Kontext interagieren.

Debugging tests on PhantomJS using Testem test runner

+5

Als ich das ausprobiert habe, konnte ich den phantomjs-Prozess in Ordnung anhängen, aber dann passierte etwas Seltsames, wo es aussieht, als würde Ember hineinspringen und versuchen, Ausnahmen einzufangen, die dem Debugger in die Quere kommen. Das erinnerte mich daran, dass ich "ember test --server" benutzen sollte, und von dort bekomme ich alle Konsolenprotokolle im Testfenster, was ein großer Schritt in die richtige Richtung ist. Vielen Dank! –

0

Um den Teil meiner ursprünglichen Frage zu beantworten, „wie ich Lüge-Meldungen bekommen zu zeigen“, wenn ich die TAP-Reporter verwende, dann console.log (in meiner app und in meinen Tests) Nachrichten erscheinen in der Ausgabe; Der xunit-Reporter übergibt console.log nicht, was mich verwirrte.

(Ich habe auch Probleme festgestellt, bei denen die Tests auf Teamcity anders ablaufen als lokal ausgeführt werden; in diesem Fall kann der TAP-Reporter mit https://github.com/aghassemi/tap-xunit (oder dem TAP teamcity-Plugin) Protokollmeldungen und Testzählungen erhalten)

9

In testem.json hinzufügen "phantomjs_debug_port": 9000.

Während Sie Ihre Tests ausführen, besuchen Sie http://localhost:9000 in Ihrem Browser und klicken Sie auf den langen Link, der angezeigt wird.

Quelle: cssugared

+1

Wenn Sie irgendwelche Probleme damit haben, stellen Sie sicher, dass etwas anderes auf Ihrem Computer nicht Port 9000 für etwas anderes verwendet – Knightsy

+0

eine Warnung für alle, die dies im Jahr 2017 lesen.Der Inspektor, der an Port 9000 exponiert ist, ist extrem instabil und für seinen beabsichtigten Zweck unbrauchbar. versuchte verschiedene Ports, aber es machte keinen Unterschied. –

5

Ich hatte kein Glück mit den anderen Antworten, hier so ist, was ich herausgefunden:

hinzufügen an dem Punkt ein return pauseTest(); in Ihrem Test, in dem Sie mit der Interaktion der Lage sein wollen Container im Browser. Dies ist in den Dokumenten, aber ich bin mir nicht sicher, ob es in den Leitfäden ist.

+0

Ich fand es im Code "dokumentiert" (innerhalb der Kommentare.) Danke. – g13n

+2

Ich bekomme den Fehler, dass 'pauseTest' nicht definiert ist oder keine Funktion. Ich denke, ich muss es irgendwo importieren, aber ich weiß nicht wie. – Ernesto

+1

[Ember.Test.pauseTest] (http://emberjs.com/api/classes/Ember.Test.html#method_pauseTest) –