Интеграционный тест Rails с селеном в качестве веб-драйвера - не могу войти - PullRequest
25 голосов
/ 27 мая 2011

Привет
У меня очень простой интеграционный тест

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

Когда я устанавливаю драйвер Capybara на rack_test тестовые проходы, но когда я устанавливаю его на selenium, он завершается с ошибкой «Неверный адрес электронной почты или пароль». на странице входа (я использую Devise). Что я делаю не так?

Ответы [ 3 ]

36 голосов
/ 11 июня 2011

Когда я устанавливаю драйвер Capybara на тестовые проходы rack_test, но когда я устанавливаю его на селен, он завершается с ошибкой «Неверный адрес электронной почты или пароль».на странице входа (я использую Devise).Что я делаю не так?

Вам придется проверить use_transactional_fixtures.При использовании транзакционных исправлений, поскольку Selenium (или любой из внешних драйверов, которые не Rack::Test) не имеют доступа к информации, которая была записана в базу данных.(поскольку транзакция не была «совершена»)

Вы можете разрешить это внутри вашего test_helper.rb следующим образом:

class ActionDispatch::IntegrationTest
  self.use_transactional_fixtures = false
end

Вы можете одновременно хотетьпосмотрите на что-то вроде Database Cleaner , так как без фиксаций транзакций ваша база данных станет неопрятной.

9 голосов
/ 15 февраля 2012

С 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
0 голосов
/ 15 марта 2013

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

config.use_transactional_fixtures = true

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

...