I’m new to Capybara and testing on Rails in general, so please forgive me if this is a simple answer.
I’ve got this test
it "should be able to edit an assignment" do
visit dashboard_path
select(@project.client + " - " + @project.name, :from => "assignment_project_id")
select(@team_member.first_name + " " + @team_member.last_name, :from => "assignment_person_id")
click_button "Create assignment"
page.should have_content(@team_member.first_name)
end
it passes as is, but if I add :js => true it fails with
cannot select option, no option with text 'Test client - Test project' in select box 'assignment_project_id'
I’m using FactoryGirl to create the data, and as the test passes without JS, I know that part is working.
I’ve tried with the default JS driver, and with the :webkit driver (with capybara-webkit installed)
I guess I don’t understand enough what turning on JS for Capybara is doing.
Why would the test fail with JS on?
I’ve read the Capybara readme at https://github.com/jnicklas/capybara and it solved my issue.
But basically its a threading issue that involves Capybara having its own thread when running the non-Rack driver, that makes the transactional fixtures feature to use a second connection in another context. So the driver thread is never in the same context of the running rspec.
Luckily this can be easily solve (at least it solved for me) doing a dynamic switching in th DatabaseCleaner strategy to use: