Hi
I have a very simple integration test
require 'integration_test_helper'
Capybara.current_driver = :rack_test
class AdminSignsInTest < ActionDispatch::IntegrationTest
test 'can sign in' do
email = 'bob@example.com'
password = 'secret_password'
Admin.create email: email, password: password
visit new_admin_session_path
fill_in 'admin_email', with: email
fill_in 'admin_password', with: password
click_button I18n.t('devise.views.sign_in')
assert_equal I18n.t('devise.sessions.signed_in'), find('p.notice').text
end
end
When I set Capybara driver to rack_test
test passes, but when I set it to selenium
, it fails with 'Invalid email or password.' on the login page (I'm using Devise). What am I doing wrong?
Когда я устанавливаю драйвер Capybara на тестовые испытания rack_test, но когда я устанавливаю его на selenium, он завершается ошибкой с «Неверный адрес электронной почты или пароль». на странице входа (я использую Devise). Что я делаю не так?
Вам придется проверить use_transactional_fixtures
. При использовании транзакционных приспособлений, потому что Selenium (или любой из внешних драйверов, которые не Rack::Test
) не имеют доступа к информации, которая была записана в базу данных. (поскольку транзакция не была «совершена»)
Вы можете разрешить это внутри своего test_helper.rb
с помощью следующего:
class ActionDispatch::IntegrationTest
self.use_transactional_fixtures = false
end
Вы можете одновременно хотеть посмотрите на что-то вроде Database Cleaner , так как без фиксаций транзакций ваша база данных станет неопрятной.
Из http://opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/ :
Вам также понадобится DatabaseCleaner , поскольку транзакционные устройства не работают с Selenium. Добавьте гем database_cleaner в группу: test вашего Gemfile и поместите следующий код в spec / support / database_cleaner.rb:
DatabaseCleaner.strategy = :truncation
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before :each do
DatabaseCleaner.start
end
config.after :each do
DatabaseCleaner.clean
end
end
Я нашел ответ Мэттвиндера сработавшим, но мне также пришлось закомментировать строку
config.use_transactional_fixtures = true
в spec / spec_helper.rb. Просто переопределить его в spec / support / database_cleaner.rb было недостаточно, чтобы заставить логины работать с Selenium.