Capybara+Selemium: как инициализировать базу данных в коде интеграционного теста и сделать ее видимой в приложении Rails?

Конфигурация. Интеграционные тесты для проекта Rails с использованием RSpec, Capybara, драйвера Selemium, базы данных SQLite.

Ситуация: у меня было несколько интеграционных тестов с Capybara и драйвером по умолчанию race_test. Они создают регистрацию пользователя (для Devise gem) прямо в базе данных. Затем они входят в систему и тестируют сценарий с использованием Capybara DSL, как это сделал бы пользователь.

Проблема. Я попытался изменить драйвер на Selenium, чтобы также протестировать код JavaScript. Теперь тесты терпят неудачу, потому что приложение не видит регистрацию пользователя, созданную тестами.

Исследование: похоже, что драйвер Selenium по-разному работает с транзакциями, поэтому изменения, сделанные в тесте, невидимы в веб-приложении. Возможное решение включает:

config.use_transactional_fixtures = false 
DatabaseCleaner.strategy = :truncation

person Alexey    schedule 25.03.2011    source источник


Ответы (1)


Для меня работало решение из здесь и здесь:

  • добавить в Gemfile gem database_cleaner
  • создать файл spec/support/javascript.rb с содержимым

`

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before(:each) do
    if example.metadata[:js]
      Capybara.current_driver = :selenium
      DatabaseCleaner.strategy = :truncation
    else
      DatabaseCleaner.strategy = :transaction
      DatabaseCleaner.start
    end
  end

  config.after(:each) do
    Capybara.use_default_driver if example.metadata[:js]
    DatabaseCleaner.clean
  end
end

`

хотя это вызвало небольшие штрафы к времени выполнения моего контроллера и спецификации модели (от 40 до 43 секунд).

person Alexey    schedule 25.03.2011
comment
у меня не сработало «пример» недоступен из примера (например, из блока «it» или из конструкций, которые выполняются в рамках примера (например, перед, пусть и т. д.). Он доступен только в группе примеров (например, блок описания или контекста) Capybara 2.6.2, Rspec 3.4.0, Rails 4.2.1 - person Tobi; 29.04.2016