Я запускаю приложение sinatra и у меня есть набор тестов, использующий rspec 2.7.0
и webrat 0.7.3
(обе самые последние версии).У меня есть обширный набор тестов для всех моих действий с запросом, и кажется, что он работает нормально.Сегодня я обнаружил перенаправление Sinatra помощника уровня запросов и реализовал его в нескольких областях моего приложения, которые отображали формы с запросами get, которые принимали параметры.
Приятная вещь оredirect back
помощник в том, что, если у меня есть действие, скажем:
get '/login' do
@used_var = params[:var]
haml :login
end
, которое отображает форму, я могу получить подтверждение по запросу после получения формы:
post '/login' do
# pretend User.authenticate pulls back a user entry from the database if there
# is a valid username/password combination
unless User.authenticate(params[:username], params[:password]).nil?
redirect '/content'
else
flash[:notice] = "Invalid username/password combo"
redirect back # will redirect back to the get '/login' request
end
end
И еслиформа не проверяется должным образом, она перенаправляет обратно на страницу с параметром from и сохраняет все параметры, которые были переданы, без необходимости беспокоиться о сохранении ее в переменной сеанса.Единственная проблема в том, что rspec, похоже, не хочет хорошо играть с помощником redirect back
.то есть, если у меня есть специальное действие, которое делает это:
it 'should redirect to login when invalid username/password combo is received.' do
get '/login', :var => 'value'
fill_in 'username', :with => 'invalid_username'
fill_in 'password', :with => 'invalid_password'
click_button 'Submit'
last_response.should be_redirect; follow_redirect!
last_request.url.should include("/login")
end
Спецификация не проходит, потому что по какой-то причине кажется, что rspec
или webrat
не срабатывает на помощнике redirect back
и вместо этого перенаправляет запрос обратно на root
url для моего приложения ('/'
).
Я хочу знать, есть ли способ заставить rspec перенаправить в нужное место в этихслучаи?Реальное приложение работает, как и ожидалось, когда я тестирую его в своем браузере (оно перенаправляет меня на первую страницу с параметрами), но тесты rspec не проходят должным образом.