我想为我的“foo”控制器设置一个成员路由,它的名称是“bar”,只响应POST请求。但是,在我的RSpec测试中,我注意到它响应所有请求类型(GET、POST、PUT、DELETE)。
我原以为将路由定义为这样会限制它只响应POST请求:
这似乎得到了进一步证实,因为当我运行
然而,从RSPEC来看,以下测试对于GET、PUT和DELETE请求失败(意味着控制器成功处理请求):
我错过了什么小细节吗?如何限制我的“bar”成员路由只响应“post”请求。
编辑:
这似乎是RSpec 2.0或{{link1:ActionController :: TestCase}}的问题,因为当我尝试使用除POST之外的任何东西命中我的服务器上的/ foo /:id / bar 时,我会收到以下错误:
我原以为将路由定义为这样会限制它只响应POST请求:
resources :foo do
member do
post 'bar'
do
end
这似乎得到了进一步证实,因为当我运行
rake routes
时,它仅显示如下的“bar”路由:bar_foo POST /foo/:id/bar(.:format) {:action=>"bar", :controller=>"foo"}
然而,从RSPEC来看,以下测试对于GET、PUT和DELETE请求失败(意味着控制器成功处理请求):
describe FooController do
describe "GET bar" do
it "should not be successful" do
foo = FactoryGirl.create(:foo)
get :bar, :id => foo.id
response.should_not be_ok
end
end
end
我错过了什么小细节吗?如何限制我的“bar”成员路由只响应“post”请求。
编辑:
这似乎是RSpec 2.0或{{link1:ActionController :: TestCase}}的问题,因为当我尝试使用除POST之外的任何东西命中我的服务器上的/ foo /:id / bar 时,我会收到以下错误:
Routing Error
No route matches [GET] "/foo/1/bar"
get :bar
调用中实际访问的路径?它是否列出了Started GET "/foo/:id/bar"
或其他不同的内容?此外,你的 routes.rb 文件底部是否有一个“catch-all”路由? - Ryan