Тестирование нересурсных действий в Ruby on Rails - PullRequest
1 голос
/ 21 января 2011

Я добавил следующее в мой файл config / rout.rb:

match 'login' => 'sessions#new'
match 'logout' => 'sessions#destroy'
match 'auth/:provider/callback' => 'sessions#create'
match 'auth/failure' => 'sessions#new'
match 'sessions/delegate' => 'sessions#delegate'

Это позволяет мне иметь мою собственную форму входа в систему, которая аутентифицируется через OmniAuth и поставщика OpenID в этом случае. Маршруты и код работают хорошо, но у меня проблема с написанием функциональных тестов для SessionsController.

Тестирование нового действия работает хорошо:

test "show login form when requesting new session" do
  get :new
  assert_response :success
end

Но тестирование действия создания дает мне исключение: ActionController :: RoutingError: Нет подходящих маршрутов {: controller => "session",: action => "create"}

Код такой:

test "create session adds logged in user" do
  request.env['rack.auth'] = {:uid => auths(:one).open_id, :provider => 'open_id'}
  post :create
  # assert that create action did it's things here
end

Я пытался заменить пост на get, но результат тот же. Почему найдено одно действие, а не другое?

1 Ответ

0 голосов
/ 21 января 2011

Предположительно, это сбивает с толку, потому что вы не предоставляете ключ: провайдера из шаблона совпадения. Возможно, вам будет проще указать имена для этих нересурсных маршрутов, например:

match 'auth/:provider/callback' => 'sessions#create', as: 'callback'

Это позволит вам post callback_path(provider: whatever) в вашем тесте, Я думаю : -)

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