2016-08-07 50 views
0

Ich habe eine sehr einfache Schienen 5 Projekt einrichten, mein Problem zu verengen: https://github.com/benedikt-voigt/capybara_js_demoWie wird DB mit Rails 5, Minitest, Capybara JS (Selen) gereinigt?

In diesem Projekt der Daten Mutation durch die Capybara JS getan wird nicht gelöscht, weder durch Rails noch von der Datenbank Reinigern ich hinzu.

Das folgende große Blog argumentiert, dass keine DatabaseCleaner benötigt wird: http://brandonhilkert.com/blog/7-reasons-why-im-sticking-with-minitest-and-fixtures-in-rails aber das funktioniert nur für Spiele, nicht für die durch einen Out-of-thread Capybara-Test durchgeführt Mutation. Ich habe den Datenbank-Reiniger hinzugefügt, aber das benötigte auch Arbeit.

Hat jemand eine Beispieleinrichtung?

Antwort

0

Von einem schnellen Blick auf Ihren Test würde ich sagen, dass es Daten verlässt, weil die Daten tatsächlich hinzugefügt werden, nachdem DatabaseCleaner reinigt. Der click_on Aufruf tritt asynchron auf, wenn also Ihr assert_no_content Aufruf passiert, gibt es keine Garantie, dass die App die Anfrage schon bearbeitet hat oder die Seite sich noch geändert hat und da die aktuelle Seite nicht den Text 'Name ist schon vergeben' enthält vergeht und die Datenbank wird bereinigt. Währenddessen wird der Klick von der App verarbeitet und die neuen Daten werden nach der Reinigung erstellt. Sie müssen prüfen/warten auf Inhalte, die auf der Seite nach dem Klick erscheint - so etwas wie

page.assert_text('New Foo Created') 

Sie nur dort zu behaupten sollte kein Inhalt ist, wenn Sie bereits die Seite wissen, hat sich verändert, oder Sie erwarten etwas von der aktuellen Seite zu verschwinden.

+0

Tom, Dank für die Betreuung daran. Ich habe es ausprobiert und die Behauptung geändert, aber das löst das Problem nicht. Das Problem ist immer noch, dass die erstellten Objekte nicht aus der DB entfernt werden. Auch nach dem Durchlauf der Testsuite bleiben diese Daten in der DB erhalten. – Ben

0

Ich löste das Problem jetzt durch die Verbindung zu einer DB Einstellung

class ActiveRecord::Base 
    mattr_accessor :shared_connection 
    @@shared_connection = nil 

    def self.connection 
    @@shared_connection || ConnectionPool::Wrapper.new(:size => 1) { retrieve_connection } 
    end 
end 
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 

wie beschreiben hier: https://mattbrictson.com/minitest-and-rails

ich hier das Arbeits Repo hochgeladen: https://github.com/benedikt-voigt/capybara_js_demo_working