gpt4 book ai didi

ruby-on-rails - Rails "POST"成员路由响应所有请求类型

转载 作者:行者123 更新时间:2023-12-04 03:41:25 27 4
gpt4 key购买 nike

我正在尝试为我的 'foo' Controller 设置一个成员路由,它被命名为 'bar',这样它就应该只响应 post 请求。但是,我注意到在我的 RSpec 测试中,它响应所有请求类型(GET、POST、PUT、DELETE)。

我的印象是这样定义路由会限制它只响应 POST 请求:

resources :foo do
member do
post 'bar'
do
end

当我运行 rake routes 时,这似乎进一步证实了这一点。它只显示“酒吧”路线,如下所示:
bar_foo    POST    /foo/:id/bar(.:format)    {:action=>"bar", :controller=>"foo"}

但是,从 RSPEC 来看,以下测试失败(意味着 Controller 成功处理请求)对于 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' 成员路由仅响应“发布”请求。

编辑:

这似乎是 RSpec 2.0 或 ActionController::TestCase 的问题。 ,因为当我尝试点击 时出现以下错误/foo/:id/bar 在我的服务器上,除了 POST 之外什么都没有:
Routing Error

No route matches [GET] "/foo/1/bar"

最佳答案

根据我自己的经验,只要路由存在,RSpec Controller 测试就不会尝试强制执行路由行为。 RSpec 确实提供路由测试,specifically the be_routable matcher .
鉴于以下 route.rb片段:

post :foo, to: 'foo#create'
它出现
it "won't work as expected" do
get :foo
expect(response).to be_ok #=> pass

post :foo
expect(response).to be_ok #=> pass
end
将通过。仅当路由完全从 route.rb 丢失时会不会失败。
以下将通过并可用于执行我们感兴趣的测试:
it "responds to only the proper HTTP verbs" do
expect(get: :foo).not_to be_routable #=> pass - Cannot GET 🙅‍♂️
expect(post: :foo).to be_routable #=> pass - POST works 🎉
end

关于ruby-on-rails - Rails "POST"成员路由响应所有请求类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com