如何使用rspec测试命名路由?

bte*_*les 13 ruby routing rspec routes ruby-on-rails

鉴于我有一条命名路线:

map.some_route '/some_routes/:id', :controller => 'some', :action => 'other'
Run Code Online (Sandbox Code Playgroud)

如何使用路由规范文件'spec/routing/some_routing_spec.rb'来测试该命名路由?

我在"描述SomeRouteController"块之后尝试了这个并且它不起作用,我得到'undefined method'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
Run Code Online (Sandbox Code Playgroud)

Bal*_*ldu 13

如果这是在控制器规范中,您可以直接调用路由方法,不需要帮助程序.

describe SomeController do
  it 'should recognize ma routes!' do
   thing_path(23).should == '/things/23'
  end
end
Run Code Online (Sandbox Code Playgroud)


doc*_*hat 12

在RSpec-Rails 2.7+中,您可以创建一个spec/routing目录并将路由规范放在那里.有关详细信息,请参阅rspec-rails文档.


Jar*_*red 6

这也有一个很好的应该匹配:

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

有关使用带有rspec的shoulda匹配器的更多信息:

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