我有一个rails应用程序,我使用了slugged url。我如何用Rspec测试这些网址。
rake路线正在产生以下结果
new_user_session GET /login(.:format) sessions#new
user_session POST /login(.:format) sessions#create
bays GET /:slug/bays(.:format) bays#index
POST /:slug/bays(.:format) bays#create
new_bay GET /:slug/bays/new(.:format) bays#new
edit_bay GET /:slug/bays/:id/edit(.:format) bays#edit
bay GET /:slug/bays/:id(.:format) bays#show
PATCH /:slug/bays/:id(.:format) bays#update
PUT /:slug/bays/:id(.:format) bays#update
DELETE /:slug/bays/:id(.:format) bays#destroy
现在,当我为bays控制器运行rpec时,我发现了以下错误。
Failure/Error: get :index, {}, valid_session
ActionController::UrlGenerationError:
No route matches {:action=>"index", :controller=>"bays"}
使用
rspec-rails (3.0.1)
rails (4.0.0)
答案 0 :(得分:1)
正如您所定义的那样...托架索引需要:slug
参数。根据错误消息,您已经没有将slug传递给此路径。您必须通过:slug
(例如get :index, :slug => "1234", valid_session
)或重新定义路线以不需要它。
用于测试rspec中的路由...这是rspec的基本部分:rspec routing specs
在你的情况下它会是这样的:
{ :get => "/1234/bays" }.
should route_to(
:controller => "bays",
:slug => "1234"
)
答案 1 :(得分:0)
对于rspec 3.x,你可以选择:
scenario 'get correct slug', :type => :routing do
expect(get("/models/slug")).to route_to(:controller => "controller_name", :action => 'action_name', :id => "your_slug_name")
end
注意阻止之前的type: :routing
定义。
更多信息here。