2010-07-06 12 views
12

Ich verwende Gurke, Rails3, RSpec2 und Autotest. Ich versuche herauszufinden, warum meine Features unendlich looping sind. Ich vermute, dass einige Dateien während der Tests geändert wurden, aber ich bin mir nicht sicher, welche. Ich habe einige Ausnahmen zu meinem .autotest ohne Würfel hinzugefügt.Wie behebe ich Probleme mit Autotest-Endlosschleifen?

Gibt es irgendwelche Schritte, die ich unternehmen kann, um dieses Problem zu beheben?

Es wäre cool, wenn ich sehen könnte, welche Dateien eine Wiederholung auslösen oder zur Laufzeit, welche Dateien überwacht/nicht überwacht werden.

hier ist mein .autotest Inhalt

require 'autotest/growl' 

Autotest::Growl::clear_terminal = false 

# Skip some paths 
Autotest.add_hook :initialize do |autotest| 
    %w{.git .DS_store db log tmp rerun.txt}.each { |e| autotest.add_exception(e) } 
end 

Antwort

15

Ok, also habe ich es herausgefunden. Ich tauchte in die Quelle von Autotest ein, um besser zu verstehen, was vor sich ging. Es erstellt eine Regexp.union aus allen Ausnahmen und ignoriert Dateien, deren relative Pfade mit dem entsprechenden Ausdruck übereinstimmen.

besser Um den Fehler verstehe ich außer meinem Projekt alles im Verzeichnis zu .autotest./app, ./lib, ./public, ./script, ./spec und ./features hinzugefügt. Etwas wie dieses:

# .autotest - to troubleshoot 
Autotest.add_hook :initialize do |at| 
    at.add_exception(%r{^\./\.git}) 
    ... 
    at.add_exception(%r{^\./db}) 
    ... 
    at.add_exception(%r{^\./rerun.txt}) 
    ... 
end 

Wenn ich dies tat, bekam ich keine Endlosschleife. Danach habe ich angefangen, jede Ausnahme zu kommentieren. Es stellte sich heraus, dass die einzige Datei, die ich manuell ignorieren musste, Gemfile.lock war. Aus irgendeinem Grund wird dies entweder geändert oder verwirrender Autotest bis zu dem Punkt, an dem es eine Gurkenschleife macht.

Damit diese .autotest löste das Problem:

# .autotest - to fix 
Autotest.add_hook :initialize do |at| 
    # Gemfile.lock is causing cucumber to run infinitely. Don't watch it. 
    at.add_exception(%r{^\./Gemfile.lock}) 
end 

ich auf der Gurke Liste berichten werde sie wissen zu lassen, sie in Autotests Ausnahmen, dass die eingebaute hinzufügen sollten.

+0

Danke für das Teilen. – zetetic

+3

Ich habe versucht, nur Gemfile.lock ausgenommen, aber das hat nicht den Trick gemacht. Am Ende habe ich folgendes benutzt: Autotest.add_hook: initialisiere do | at | % w {.svn .hg .git vendor rerun.txt db log tmp .DS_store Gemfile.lock} .each {| exception | at.add_exception (exception)} ende – localshred

+0

Autotest sagen zu ignorieren 'Gemfile.lock' arbeitete für mich. Es sah so aus, als wenn ich meine Spezifikationen ausführen würde, 'Gemfile.lock' wurde geändert (meine 'gem' capistrano'' Zeile wurde während des Tests verändert und dann danach wieder zurückgestellt ... seltsam). –

0

Sie ruby-debug verwenden können. Sie können dann in Ihrem Code Debugger-Anweisungen hinzufügen und sie auflösen.

+0

Ok ich kann damit umgehen, aber sobald ich breche, wie kann ich Autotest überprüfen? Ich bin mir nicht sicher, wo ich hinschauen soll, um in seine Interna zu schauen und zu sehen, warum es tut, was es tut. –

1

Legen Sie Ihre Dateien unter Versionskontrolle. Führen Sie autotest aus und führen Sie dann den Statusbefehl Ihres VC-Systems aus (z. B. git status), um zu sehen, was sich geändert hat.

PS: Es ist wahrscheinlich rerun.txt, die von Cucumber berührt wird, wenn Sie Funktionen ausführen.

+0

mit Git. Der Status meldet, dass sich nichts geändert hat (ich ignoriere wahrscheinlich die Datei, die geändert wird, _wenn es eine gibt). Ich habe auch rerun.txt meinen autotest Ausnahmen hinzugefügt. Aktualisierte Antwort, um meinen .autotest-Inhalt aufzunehmen. –

+0

Interessante Idee, ich werde einen neuen Checkout versuchen und alles bald verfolgen, um zu sehen, ob das hilft. –

+0

2 Dateien geändert werden (nach git) sind db/test.sqlite3 und log/test.log. Scheint so, als ob .autotest dem Autotest sagen sollte, sie nicht zu sehen. Ich bin mir sicher, Gurken-Schienen haben das auch eingebaut. Schaut mein .autotest ab? –

7

Ich wollte nur Danke sagen. Stellt sich heraus, war es für mich das Protokollverzeichnis. Meine .autotest Datei sieht so aus.

# .autotest 
Autotest.add_hook :initialize do |at| 
    # Log directory is causing cucumber to run infinitely. 
    at.add_exception(%r{^\./log}) 
end

Als Referenz finden Sie unter "Anpassen von Autotest- Behavior" in http://github.com/aslakhellesoy/cucumber/wiki/Autotest-Integration, die über die Endlosschleife Problem spricht.

6

In Linux/Unix Sie den Befehl verwenden können:

$ find . -mmin -5 

, welche Dateien geändert wurden in den letzten 5 Minuten (oder was auch immer Ablauf ist sachgemäßer) herauszufinden. Dies kann sehr hilfreich beim Finden der Datei sein, die Endlosschleife auslöst. Fügen Sie dann die Ausnahme wie in den anderen Antworten beschrieben hinzu.

In meinem Fall war der Schuldige webrat.log.

5

Es ist erwähnenswert, dass Sie -v an autospec/autotest übergeben können und es wird ausgedruckt, was es ausgelöst hat.

+0

toller Hinweis, danke! –

+0

Ah, wichtige Infos! – Felixyz

Verwandte Themen