Rails 3.1: тестирование "DELETE 'destroy'" в спецификациях контроллера и маршрута - PullRequest
1 голос
/ 05 октября 2011

Я тестирую приложение, которое использует Sorcery для аутентификации.У меня есть контроллер сессий, который обрабатывает вход / выход пользователя с помощью тестов для выполнения действий.Я понимаю, что действие уничтожения обычно принимает идентификатор в качестве параметра, но это не нужно с функцией выхода.

rout.rb

resources :sessions

# match "/signout", :to => "sessions#destroy"

session_controller_spec.rb

describe "DELETE 'destroy'" do
  it "should log the user out" do
    login_user(Factory(:user))
    delete :destroy
    controller.current_user.should be_nil
    controller.should_not be_signed_in
  end 
end

session_routes_spec.rb

it "should route DELETE /sessions to sessions#destroy" do
  { :delete => "/sessions" }.should route_to(
    :controller => "sessions",
    :action => "destroy"
  )
end

Оба вышеуказанных теста не пройдены, поскольку маршрут ожидает идентификатор.Есть ли способ избавиться от этой необходимости?Я знаю, что мог бы просто использовать названный маршрут "signout_path", но мне просто любопытно, могу ли я все еще использовать session_path,: method =>: delete, не передавая ему идентификатор.

Что действительно шокирует меня, еслиЯ раскомментирую совпадение "/ signout", которое передает спецификация контроллера (однако спецификация маршрута не делает).Как строка соответствия вызывает прохождение спецификации контроллера?

1 Ответ

0 голосов
/ 02 января 2012

Попробуйте отобразить действие уничтожения как: метод сбора ресурсов сессий, в вашем config / rout.rb:

resources :sessions, :collection => [:destroy]

По умолчанию destroy - это метод "member", для работы которого требуется указанный ресурс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...