Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Login Failure when Testing with Capybara, Rspec and Selenium in Rails 3.1

I added some confirmation dialog boxes for my Rails 3.1 application and, prior to that, their corresponding tests. Following the model of Railscast #257, I added ':js => true' to the test, added database_cleaner and modified the spec_helper.rb file accordingly.

When I run the test, Firefox launches, Capybara-Selenium fills in the fields the the appropriate username and a password, but log-in fails (i.e., "invalid username/password".) Other tests that do not have ':js => true' and also login, do still pass.

I would like to add more javascript to my application in the future and I am avoiding solutions that would hack Capybara to get this to work (e.g., click 'OK' on all dialogs.)

Any ideas what I might be missing? Fail that, any suggestions on how to debug this problem?

Thank you.

like image 812
JHo Avatar asked Jan 09 '12 16:01

JHo


1 Answers

You should set use_transactional_fixtures = false for your seleniumtests. This can be done in the spec_helper.rb with

config.use_transactional_fixtures = false 

for all your tests.

Or do this for a single testcase:

describe 'testcase' , :type => :request do
  self.use_transactional_fixtures = false
  it 'your test', :js => :true do
    testing...
  end
end

This happens because selenium-tests access the database in a different way. With transactional fixtures enabled, selenium will work on an empty database -> your user does not exist and you cannot login.

For normal tests you should use transactional fixtures because your tests run much faster.

like image 83
Jens Ehrlich Avatar answered Oct 07 '22 17:10

Jens Ehrlich