Я провел некоторые исследования, и вот что я получил.
ra_response_steps.rb
ожидает, что перенаправление будет грубым, и затем история, чтобы определить, следует ли следовать перенаправлению или нет.
Это сбой, потому что реализация Webrat Session имеет следующий код:
def request_page(url, http_method, data) #:nodoc:
h = headers
h['HTTP_REFERER'] = @current_url if @current_url
debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
if h.empty?
send "#{http_method}", url, data || {}
else
send "#{http_method}", url, data || {}, h
end
save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?
reset
@current_url = url
@http_method = http_method
@data = data
if internal_redirect?
check_for_infinite_redirects
request_page(response_location, :get, {})
end
return response
end
Обратите внимание на if internal_redirect? ... end
. Это - то, что делает наши тесты неудачными, потому что webrat следит за перенаправлениями.
В качестве обходного пути вы можете прокомментировать эти строки в своем сеансе вебрата, но это, вероятно, не приличное решение. Я немного поработаю и выложу где-нибудь патч.