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?
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.
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.
Tags und Links ruby-on-rails capybara rspec selenium database-cleaner