【问题标题】:RSpec testing in Rails and 304 HTTP status codeRails 中的 RSpec 测试和 304 HTTP 状态码
【发布时间】:2011-04-17 07:14:07
【问题描述】:

使用 Devise 进行身份验证。在具有以下功能的控制器上:

before_filter authenticate_user!, :except => [ :index, :show ]

我总是在经过身份验证的操作上获得304 Not Modified 状态代码而不是200 OK,即使在登录时在浏览器中也是如此。视图渲染和工作都很好。

它阻止了我的测试通过:

describe 'GET index' do
  it 'should be successful' do
    get 'index'
    response.should be_success  # Fails due to 304 status code
  end
end

一开始我以为是我的控制器的错,但是除了before_filterdecent_exposure之外,控制器再普通不过了。

这个问题的根源可能是什么?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 http http-response-codes


【解决方案1】:

304s 是个好东西。在这种情况下,这是预期的(和期望的),即使它可能会给您的一些测试带来麻烦。 304 表示您的网络服务器和客户端正在以允许缓存网络服务器响应的方式进行通信。

我对 Rails 并不完全熟悉,但我怀疑有一种内置机制可以缓存您的响应。这是一篇关于缓存的 Rails 文章:
http://guides.rubyonrails.org/caching_with_rails.html

这看起来像是在控制器/操作级别禁用缓存的一种方法(忽略有关 iframe 的部分......这也可能不是最好的方法):
http://arjunghosh.wordpress.com/2008/04/29/how-to-force-the-browser-to-not-cache-in-rails/

【讨论】:

  • 令人困惑的是,test 环境中已经禁用了缓存。如果我理解正确,我的任何控制器操作都可能返回此状态,对吗?那么肯定有别的问题了……
【解决方案2】:

测试失败,因为我使用 Devise 对可确认模块进行身份验证,并且没有使用已确认用户。

在工厂设置confirmed_at属性后,所有测试都通过了。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 2011-08-13
    • 2019-09-17
    • 1970-01-01
    • 2010-12-12
    • 2022-07-28
    • 2015-06-09
    相关资源
    最近更新 更多