2012-06-01 7 views
5

Próbuję uzyskać przykłady RSpec pracujące z Capybara przy użyciu sterownika javascript (w/Webkit lub Poltergeist), ale istnieje problem z blokowaniem bazy danych podczas aktualizacji tabeli. Oto część przykład w pytaniu:Limit czasu bazy danych przy uruchomieniu RSpec/Capybara za pomocą sterownika javascript

scenario 'by changing the contract attributes', js: true do 
    login_as @admin, scope: :user 

    contract = Contract.create(number: '123', 
           start_at: Date.today, 
           end_at: Date.today + 1.month) 

    visit "/contracts/#{contract.id}/edit" 

Używam opracować i Warden::Test::Helpers się zalogować.

Running rspec zajmuje trochę czasu i wszystko mam:

Failure/Error: visit "/contracts/#{contract.id}/edit" 
Capybara::Driver::Webkit::WebkitInvalidResponseError: 
    Unable to load URL: http://127.0.0.1:46520/contracts/1/edit 

Rejestr pokazuje, że istnieje baza kwestia blokowania:

Started GET "/contracts/1/edit" for 127.0.0.1 at 2012-06-01 12:10:26 -0400 
    (0.2ms) BEGIN 
    (51083.3ms) UPDATE `users` SET `last_sign_in_at` = '2012-06-01 16:10:26', `current_sign_in_at` = '2012-06-01 16:10:26', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-06-01 16:10:26' WHERE `users`.`id` = 1 
Mysql2::Error: Lock wait timeout exceeded; try restarting transaction: UPDATE `users` SET `last_sign_in_at` = '2012-06-01 16:10:26', `current_sign_in_at` = '2012-06-01 16:10:26', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-06-01 16:10:26' WHERE `users`.`id` = 1 
    (0.8ms) ROLLBACK 

Próbowałem wiele rzeczy (to pytanie wydawało najbliżej rzeczywistego rozwiązania: Capybara with :js => true causes test to fail), ale nic nie działało, nawet pozbycie się DatabaseCleaner. Czy jest coś jeszcze, co mógłbym spróbować?

Edit: Oto plik spec_helper.rb na żądanie: https://gist.github.com/2855631

+0

Czy możesz wysłać swój plik spec_helper? – DVG

+0

@DVG Edytowałem moje pytanie z linkiem do istoty. –

Odpowiedz

5

To prawie na pewno

config.use_transactional_fixtures = true 

który stara się uruchomić przykład wewnątrz transakcji, w celu posiadania czystych danych. Ponieważ używasz narzędzia do czyszczenia baz danych, masz już tę funkcję, więc ustaw tę wartość na false i powinieneś być gotowy.

https://www.relishapp.com/rspec/rspec-rails/docs/transactions

+0

Wielkie dzięki, to było tak oczywiste, że nigdy bym tego nie znalazł! ;-) –

0

Dla mnie rozwiązaniem było wręcz przeciwnie :)

mam ustawić go false:

config.use_transactional_fixtures = false 

I to wszystko działało. Z true nie działało tak jak wcześniej.

Powiązane problemy