2015-01-15 6 views
6

Ich hätte gerne etwas wie binding.pry in Ruby, im Grunde möchte ich in der Lage sein, eine Zeile zu meinem Code hinzufügen, und einen Debugger dort stoppen, während Karma läuft meine Winkel/Jasmin testetREPL Werkzeug für eckig/Jasmin/Karma

it('runs my jasmine test', function() { 
    var a = true; 
    binding.pry // stops code and enters REPL prompt 
    expect(a).toBe(true); 
}); 

Das Ergebnis ist dann eine Aufforderung

#

Wo ich Dinge zur Verfügung zu diesem Zeitpunkt in diesem Rahmen auf die Variablen tun könnte, wäre

# a = false;

Dann könnte ich beenden und die Ausführung fortsetzen.

# exit

Genau wie das Debuggen mit Entwickler-Tool, aber ich mag diesen außerhalb der Browser-Umgebung haben und im Terminal unter einem Karma Prozess. Ich habe auch gefunden https://github.com/alidavut/locus, aber es scheint nicht unter Karma zu arbeiten.

Antwort

3

Ich bin von keiner Weise bewusst eine repl im Karma Prozess, zu starten, aber was Sie tun können, ist einfach schreiben:

debugger; 

an dem Punkt, wo Sie debuggen möchten. Dann, Wenn Sie die Dev Tools des Browsers bereits geöffnet haben wenn diese Zeile ausgeführt wird, wird die Ausführung angehalten und Sie können "watch expressions" verwenden, die für Sie ausreichen könnten. Sie haben Zugriff auf den Aufruf-Stack und alle lokalen Variablen. Sie können auch lokalen Variablen in einem Überwachungsausdruck zuweisen, und die neuen Werte bleiben bestehen, wenn Sie die Ausführung fortsetzen.

Ich habe dies nur in Chrome getestet. Was ich tun müssen, ist:

  1. Setzen Sie die debugger; Anweisung in
  2. starten Karma..
  3. Öffnen Sie die Chrome-Entwicklertools.
  4. Speichern Sie eine der überwachten Karma-Dateien (jetzt werden die Tests wieder mit den bereits geöffneten Dev-Tools ausgeführt).
  5. Gewinn!

Die Erstellung einer REPL auf der Karma-Seite würde viel mehr Aufwand erfordern, da der gesamte Testcode im Browser ausgeführt wird. Um eine REPL aus dem Karma-Prozess zu steuern, müssen Sie Ereignisse einrichten, um über die Sockets zu kommunizieren, die Karma für die Kommunikation mit dem Browser konfiguriert. Sollte jedoch machbar sein, wenn Sie so geneigt sind.EDIT: eigentlich, um dies zu tun, müssten Sie Javascript-Ausführung bei einer bestimmten Aussage machen können, und ich bin mir ziemlich sicher, dass debugger; die einzige Möglichkeit ist, dies zu tun.

+0

Leider funktioniert Debugger nicht in der Befehlszeile. Funktioniert nicht mit PhantomJS. Funktioniert nicht unter nodeJS/gulp/anderen Kommandozeilen-basierten Javascript-Dateien. – Cosmin

+0

Haben Sie versucht, PhantomJS mit '--remote-debugger' zu starten? http://phantomjs.org/troubleshooting.html –