Вы используете WebRat или Capybara в качестве драйвера в Cucumber? Вы можете сказать, посмотрев на features/support/env.rb
. Я использую Капибару, так что моя включает в себя следующие строки:
require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'
По умолчанию раньше использовался WebRat, но недавно он переключился на Capybara, поэтому большая часть кода из более старых примеров в Интернете не работает должным образом. Предполагая, что вы тоже используете Капибару ...
request.request_uri - вместо него вы хотите current_url. Возвращает полный URL страницы вашего драйвера. Это менее полезно, чем просто получить путь, поэтому я использую этот помощник:
def current_path
URI.parse(current_url).path
end
response.should be_success - Одно из самых больших разочарований в работе с Capybara (и в некоторой степени Cucumber) заключается в том, что он откровенно ревнует только к взаимодействию с тем, что видит пользователь. Вы не можете проверить коды ответов , используя Capybara. Вместо этого вы должны проверить видимые пользователю ответы. Перенаправления легко проверить; Просто заявите, на какой странице вы должны быть. 403-е - маленький обманщик. В моем приложении это страница с заголовком «Отказано в доступе», поэтому я просто проверяю это:
within('head title') { page.should_not have_content('Access Denied') }
Вот как я написал бы сценарий для проверки ссылки, которая иногда должна перенаправлять, а в других - не должна:
Scenario: It redirects
Given it should redirect
When I click "sometimes redirecting link"
Then I should be on the "redirected_to" page
Scenario: It does not redirect
Given it shouldn't redirect
When I click "sometimes redirecting link"
Then <assert about what should have happened>