Как использовать rspec для тестирования названных маршрутов?

Учитывая, что у меня есть именованный маршрут:

map.some_route '/some_routes/:id', :controller => 'some', :action => 'other'

Как использовать спецификацию спецификации маршрута spec/routing/some_routing_spec.rb для проверки этого именованного маршрута?

Я пробовал это после блока "описать SomeRouteController", и он не работает, я получаю метод undefined "helper":

describe SomeRouteHelper, 'some routes named routes' do
  it 'should recognize some_route' do
    helper.some_route_path(23).should == '/some_routes/23'
  end
end

Ответы

Ответ 1

Если это спецификация контроллера, вы можете вызвать метод маршрутизации напрямую, не требуется помощник.

describe SomeController do
  it 'should recognize ma routes!' do
   thing_path(23).should == '/things/23'
  end
end

Ответ 2

В RSpec-Rails 2.7+ вы можете создать каталог spec/routing и разместить там свои спецификации маршрутизации. Для получения дополнительной информации см. rspec-rails.

Ответ 3

там тоже хороший помощник:

it { should route(:get, "/users/23").to(:action => "show", :id => 23)

Дополнительная информация об использовании сокетов-помощников с rspec:

https://github.com/thoughtbot/shoulda-matchers

Ответ 4

Вы можете сделать это в своих спецификациях контроллера с помощью метода assert_routing, например:

describe UsersController do
  it "should recognize a specific users#show route" do
    assert_routing("/users/23", {:controller => "users", :action => "show", :id => 23})
  end
end

Дополнительная документация здесь.

Ответ 5

Вот как я пишу спецификации, используя RSpec2, Shoulda и Capybara. Вы сохранили бы этот файл примера в # {Rails.root}/spec/routing/thingz_routing_spec.rb или моем предпочтении # {Rails.root}/spec/routing/thingz_controller_spec.rb

require "spec_helper"

describe ThingzController do
  describe "routing" do
    it "routes to #index" do
      get("/thingz").should route_to("thingz#index")
    end
  end
end