2

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

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_filterand之外decent_exposure,控制器再普通不过了。

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

4

2 回答 2

2

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

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

这看起来像是在控制器/操作级别禁用缓存的一种方法(忽略有关 iframe 的部分......这也可能不是最好的方法):
http ://arjunghosh.wordpress.com/2008/04/ 29/如何强制浏览器在rails中不缓存/

于 2011-04-17T07:25:15.697 回答
1

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

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

于 2011-05-10T19:36:04.367 回答