Подтвердить что ты не робот

Тест интеграции Rails с селеном как webdriver - не может sign_in

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

require 'integration_test_helper'
Capybara.current_driver = :rack_test

class AdminSignsInTest < ActionDispatch::IntegrationTest

  test 'can sign in' do
    email = '[email protected]'
    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). Что я делаю неправильно?

4b9b3361

Ответ 1

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

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

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

class ActionDispatch::IntegrationTest
  self.use_transactional_fixtures = false
end

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

Ответ 2

Из http://opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/:

Вам также понадобится DatabaseCleaner, поскольку транзакционные светильники не работают с Selenium. Добавьте камень базы данных в тестовую группу 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

Ответ 3

Я нашел, что матовый ответ работал, но мне также пришлось прокомментировать строку

config.use_transactional_fixtures = true

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