Тестирование перенаправления Синатры обратно в rspec - PullRequest
0 голосов
/ 07 декабря 2011

Я запускаю приложение 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 не проходят должным образом.

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

попытайтесь передать :referer => '/login' вашим запросам, чтобы redirect_back мог знать, где на самом деле находится "назад"

0 голосов
/ 27 июня 2012

Видимо, это была ошибка в rack , и, похоже, она была исправлена ​​в выпуске rack 1.3.0. Я протестировал эту спецификацию с rack 1.2.5 (последняя версия до 1.3.0), и она не удалась, но после обновления до 1.3 она начала проходить.

После некоторого осмотра, почти уверен, что этот запрос на получение (здесь коммит ) был изменением, которое исправило его.

Так что это больше не проблема в rack ~> 1.3.

...