В моем контроллере приложений у меня есть пара методов, определенных следующим образом:
def store_location
session[:return_to] = request.fullpath
end
def redirect_back_or_default(default)
# make sure this method doesn't redirect back to the current page
if session[:return_to] == request.fullpath
redirect_to default
else
redirect_to(session[:return_to] || default)
end
session[:return_to] = nil
end
Чтобы протестировать эти методы, мне нужно найти способ установить request.fullpath
в RSpec.Кто-нибудь знает, как я могу это сделать?
Обновление
При тестировании этих методов я использую общую группу примеров, например так:
shared_examples_for "redirect back or default" do
it "should redirect" do
request
response.should be_redirect
end
describe "when the user has a back page" do
it "should redirect to back"
end
describe "when the user does not have a back page" do
it "should redirect to default" do
request
response.should redirect_to(default_path)
end
end
end
При включении групп общих примеров я делаю что-то вроде следующего:
before(:each) do
def request
post :create, :user => @attr
end
def default_path
:root
end
end
include_examples "redirect back or default"
Таким образом, когда метод использует redirect_back_or_default, мне просто нужно добавить приведенный выше код в его тесты, и яготово. Таким образом, я все еще могу говорить конкретно о тестировании redirect_back_or_default
без необходимости тестирования на реализацию, что кажется мне лучшим способом сделать BDD.