Rails integration test with selenium as webdriver - can't sign_in

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?

25
задан Art Shayderov 27 May 2011 в 15:49
поделиться

3 ответа

Когда я устанавливаю драйвер 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 , так как без фиксаций транзакций ваша база данных станет неопрятной.

37
ответ дан 28 November 2019 в 21:00
поделиться

Из 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
9
ответ дан 28 November 2019 в 21:00
поделиться

Я нашел ответ Мэттвиндера сработавшим, но мне также пришлось закомментировать строку

config.use_transactional_fixtures = true

в spec / spec_helper.rb. Просто переопределить его в spec / support / database_cleaner.rb было недостаточно, чтобы заставить логины работать с Selenium.

0
ответ дан 28 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: