首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置http状态代码

设置http状态代码
EN

Stack Overflow用户
提问于 2014-06-29 18:40:28
回答 3查看 559关注 0票数 2
代码语言:javascript
复制
redirect_to browse_path(asset.parent_id), notice: "successfully created file!", status: 201

201是创建资源时应该设置的状态。虽然上面的方法适用于create操作,但其操作的规范不再适用于:

代码语言:javascript
复制
subject { response }
describe '.create' do
    context 'when orphan' do
      before do
        post :create, asset: { parent_id: nil, uploaded_file: file }
      end

      it { should have_http_status 201 }
      it { should redirect_to '/' }
    end
end

状态期望通过,但redirect_to期望失败:

代码语言:javascript
复制
Expected response to be a <redirect>, but was <201>

我承认它不再是302重定向,但它仍然将用户重定向到一个新的路由(我想测试它)。如果我将redirect_to规范设置为302的“错误”代码,而不是201,则它会通过:

代码语言:javascript
复制
redirect_to browse_path(asset.parent_id), notice: "successfully created file!", status: 302

那么,我是否应该费心设置状态代码呢?我承认,如果我在操作中仔细设置它们或不使用它们(只需使用302重定向和200次成功),我实际上不知道浏览器是如何使用它们的,我的应用程序的功能也一样好。

如果状态代码很重要,我应该如何通过我的上述规格?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-29 18:48:40

您可以在rspec中断言response.body或其他响应属性。在这种情况下,您想要的是response.header["Location"]

您可以选择避开capybara/rspec的问题,在这里您可以断言current_url并仍然断言状态代码。

redirect_to只是一个愚蠢的中级助手,你需要达到一个稍低的水平在response.something或更高的水平与水豚,以达到你想要的地方。

票数 0
EN

Stack Overflow用户

发布于 2014-06-30 00:17:46

来自文档

状态代码可以是作为整数的标准HTTP状态代码,也可以是表示被降大小写、强调和符号化描述的符号。注意,状态代码必须是3xx HTTP代码,否则不会发生重定向。

(强调后加)

简单地说,用201状态代码重定向是一个错误。

票数 1
EN

Stack Overflow用户

发布于 2014-06-29 19:17:57

一种方法是:

代码语言:javascript
复制
its(:status){ should eq 201 }
its(:location){ should eq 'http://test.host/' }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24479071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档