Тесты контроллера используют четыре HTTP-глагола (GET, POST, PUT, DELETE), независимо от того, является ли ваш контроллер RESTful. Так что если у вас есть маршрут без RESTful (Rails3) :
match 'example' => 'story#example'
эти два теста:
require 'spec_helper'
describe StoryController do
describe "GET 'example'" do
it "should be successful" do
get :example
response.should be_success
end
end
describe "POST 'example'" do
it "should be successful" do
post :example
response.should be_success
end
end
end
оба пройдут, так как маршрут принимает любой глагол.
EDIT
Я думаю, вы смешиваете тесты контроллера и тесты маршрута. В тесте контроллера вы хотите убедиться, что логика действия работает правильно. В тесте маршрута вы проверяете, что URL идет к нужному контроллеру / действию и что хэш params генерируется правильно.
Чтобы проверить действие контроллера, просто выполните:
post :create, :provider => "twitter"`
Чтобы проверить маршрут, используйте params_from
(для Rspec 1) или route_to
(для Rspec 2):
describe "routing" do
it "routes /auth/:provider/callback" do
{ :post => "/auth/twitter/callback" }.should route_to(
:controller => "authentications",
:action => "create",
:provider => "twitter")
end
end