Rails中的RSpec测试和304 HTTP状态代码

时间:2011-04-17 07:14:08

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

使用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之外,控制器不再是常见的。

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

2 个答案:

答案 0 :(得分:1)

304是一件好事。在这种情况下,它是预期的(和期望的),即使它可能给你的一些测试带来麻烦。 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/

答案 1 :(得分:1)

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

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