Durch die Aktualisierung von Capybara von 1.0.1 auf 1.1.4 bricht database_cleaner meine Spezifikationen

8

Ich habe eine alte Rails-Anwendung auf Version 3.2.11 aktualisiert, die viele Anforderungsspezifikationen enthält, die mit Capybara Version 1.0.1 geschrieben wurden und mit dem Selenium-Treiber laufen. Die Datenbank wird nach jedem Test mit database_cleaner mithilfe der Trunkierungsstrategie bereinigt.

Ich möchte Poltergeist anstelle von Selen und aufgewerteten Capybara von 1.0.1 bis 1.1.4 verwenden, um die neueste Version von Poltergeist verwenden zu können. Nur das Ändern des Capybara-Edelsteins (und seiner Abhängigkeiten) führte zu Problemen beim Ausführen meiner Spezifikationen.

Ich erhalte immer wieder Deadlock-Fehler von meiner Postgresql-Datenbank im Bereinigungs-Handler nach jeder Spezifikation. Mein spec_helper ist ziemlich einfach und sieht so aus:

%Vor%

Der Fehler, den ich bekomme, ist wie folgt:

%Vor%

Ich benutze FactoryGirl, um Testdaten zu erstellen, aber sonst nichts besonderes IMO.

Ich konnte nicht herausfinden, was das andere Ende des Deadlocks enthält, das von database_cleaner erzeugt wird. Irgendwelche Ideen, um das herauszufinden, sind sehr willkommen.

Kennt jemand Änderungen zwischen Capybara 1.0.1 und 1.1.4, die sich geändert haben und diese Probleme verursacht haben?

    
HakonB 10.01.2013, 19:43
quelle

3 Antworten

5

Ich habe dieses Problem in der Gurke gelöst, indem ich

platziert habe %Vor%

am Ende des Schrittes (oder in deinem Fall "spec"), der etwas AJAX-Zeug macht. Ich stelle mir vor, was passiert ist, dass Gurke / Rspec Datenbank Reiniger aufruft, während der JS-Treiber immer noch auf die Ajax-Antwort wartet.

    
Clemens Helm 25.02.2013 16:28
quelle
5

Die Fehlerbehebung besteht nicht darin, sleep zu verwenden, sondern nur Capybara-API-Methoden zu verwenden, während sie auf das warten, was erwartet wird.

Unten, Zeile 2 schlägt fehl (weil current_path nicht wartet, aber Zeile 3 funktioniert (wie has_selector? wartet). Der Link zu Jonas Nicklas Artikel unten erklärt es gut.

%Vor%

Ссылка

    
Jo P 05.06.2013 22:10
quelle
1

Die von uns verwendete Lösung besteht darin, etwas auf der Seite zu finden, das sich als Reaktion auf einen erfolgreichen Ajax-Aufruf ändern sollte. So etwas wie:

%Vor%     
lobati 28.05.2014 21:20
quelle