Используя как webrat, так и capybara вместе

Я использую Capybara для тестирования интеграции/запроса, но только что понял, что я не могу выполнять просмотр с ним.

Этот ответ SO предполагает, что Webrat и Capybara могут использоваться в тандеме; но RSpec docs предлагают выбрать один из двух. Здесь другой поток github, который предполагает, что webrat может использоваться для представлений и capybara для интеграции.

Я обнаружил, что если я включу Webrat в свой gemfile, я могу использовать webrat для просмотра без проблем, но мои тесты интеграции в стиле capybara больше не работают. В частности, я получаю сообщение об ошибке со следующим простым примером:

it "should have a Home page at '/'" do
  visit '/'
  page.should have_selector('title', :content => "Home page")
end

Я получаю сообщение об ошибке:

No response yet. Request a page first.

Какой лучший способ (если есть?), чтобы заставить webrat и capybara любить друг друга?

Ответ 1

Как правило, нет причин использовать как Webrat, так и Capybara. Выберите один (возможно, Capybara). Просмотр тестов - плохая идея и вообще не требуется; обычно ваши интеграционные тесты должны охватывать эту землю.

Другими словами, исправьте свою стратегию тестирования, и проблема исчезнет.

Ответ 2

В общем, я согласен с Марненом в том, что "просто выберите один из них, возможно, Capybara", но одна из возможных причин использовать их обоих - постепенная миграция.

Скажем, у вас есть большой набор тестов, и вы переносите его на Capybara, но вы хотите, чтобы некоторые из ваших старых тестов оставались "Webrat-driven" в течение некоторого времени.

Хотя, я не нашел идеального решения для этого случая, вот что я сделал:

# features/support/env.rb
...
if ENV['WITH_WEBRAT'].nil?
    require 'capybara/rails'
    require 'capybara/cucumber'
    ...
else
    require 'webrat'
    ...
end
...

# config/cucumber.yml
...
default: --profile capybara
capybara: <% std_opts %> --tags [email protected] features
webrat:   <% std_opts %> --tags @webrat features WITH_WEBRAT=1
...

# features/webrat.feature
@webrat
...

# features/capybara.feature
...

Теперь вы можете сделать cucumber, чтобы запустить свой тестовый набор для capybara или cucumber -p webrat для ваших устаревших функций Webrat.

Не идеально, но это сработало для меня.