Ошибка в том, что вы передаете полный URL-адрес методу, который ожидает имя одного из методов действия контроллера.Если я правильно понимаю, вы пытаетесь проверить несколько вещей одновременно.
Проверка того, что у маршрута есть имя, отличается от проверки маршрута, отличается от тестирования действия контроллера.Вот как я проверяю действие контроллера (это, вероятно, неудивительно).Обратите внимание, что я совпадаю с вашим именем, а не рекомендую, что бы я использовал.
В spec / controllers / Articles_controller_spec.rb,
describe ArticlesController do
describe '#permalink' do
it "renders the page" do
# The action and its parameter are both named permalink
get :permalink :permalink => 666
response.should be_success
# etc.
end
end
end
Вот как я тестирую именованный маршрут только сrspec-rails:
В spec / routing / article_routing_spec.rb,
describe ArticlesController do
describe 'permalink' do
it 'has a named route' do
articles_permalink(666).should == '/permalink/666'
end
it 'is routed to' do
{ :get => '/permalink/666' }.should route_to(
:controller => 'articles', :action => 'permalink', :id => '666')
end
end
end
Маршрутный подборщик Должы более лаконичен, но при этом предоставляет хорошее описание и сообщение об ошибке:
describe ArticlesController do
describe 'permalink' do
it 'has a named route' do
articles_permalink(666).should == '/permalink/666'
end
it { should route(:get, '/permalink/666').to(
:controller => 'articles', :action => 'permalink', :id => '666' })
end
end
У AFAIK ни у RSpec, ни у Ifa нет конкретного, краткого способа проверки именованных маршрутов, но вы можете написать свой собственный сопоставитель.