Ruby on rails Rails 4路由排除:新操作中断rspec路由测试
我有一个简单的控制器,应该只响应显示和索引操作。为了收紧我的路由,我添加了只处理:show和:index的条件。问题在于,这似乎迫使show操作响应pro_infos/new,它可能将“new”视为:id参数 这本身不是一个真正的问题,但它打破了我的rspec路由测试,因为新的路由不可路由 从路线: 从rspec路由 rake routes | grep pro|u信息返回:Ruby on rails Rails 4路由排除:新操作中断rspec路由测试,ruby-on-rails,ruby-on-rails-4,rspec,url-routing,Ruby On Rails,Ruby On Rails 4,Rspec,Url Routing,我有一个简单的控制器,应该只响应显示和索引操作。为了收紧我的路由,我添加了只处理:show和:index的条件。问题在于,这似乎迫使show操作响应pro_infos/new,它可能将“new”视为:id参数 这本身不是一个真正的问题,但它打破了我的rspec路由测试,因为新的路由不可路由 从路线: 从rspec路由 rake routes | grep pro|u信息返回: 我知道我可以为新操作取消路由测试,但为了整个应用程序的一致性,我宁愿测试不响应它的路由。正确的/最佳实践方法是什么?您可
我知道我可以为新操作取消路由测试,但为了整个应用程序的一致性,我宁愿测试不响应它的路由。正确的/最佳实践方法是什么?您可以在路由中添加一个约束,只允许整数ID,如下所示:
resources :masters, only: [:show, :index, :new, :create] do
resources :pro_infos, only: [:show, :index], constraints: { id: /\d+/ }
end
如果使用虚荣url,即/masters/1/pro_infos/虚荣url,您可以将字母字符作为id值传递,会怎么样?
it "routes to #new" do
expect(:get => "masters/2/pro_infos/new").not_to be_routable
end
master_pro_infos GET /masters/:master_id/pro_infos(.:format) pro_infos#index
master_pro_info GET /masters/:master_id/pro_infos/:id(.:format) pro_infos#show
resources :masters, only: [:show, :index, :new, :create] do
resources :pro_infos, only: [:show, :index], constraints: { id: /\d+/ }
end