Тестирование RSpec в Rails и код состояния 304 HTTP

Использование 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_filter и decent_exposure, контроллер не мог быть более распространенным.

В чем может быть корень этой проблемы?


person Matheus Moreira    schedule 17.04.2011    source источник
comment
304 может быть возвращен только в ответ на условный запрос GET.   -  person Gumbo    schedule 17.04.2011


Ответы (2)


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/

person Polaris878    schedule 17.04.2011
comment
Что сбивает с толку, так это то, что кэширование уже отключено в среде test. Если я правильно понял, любое из моих действий контроллера может вернуть этот статус, верно? Тогда что-то еще должно быть не так... - person Matheus Moreira; 17.04.2011

Тесты не прошли, потому что я использовал Devise для аутентификации с подтверждаемым модулем и не использовал подтвержденных пользователей.

После установки атрибута confirmed_at на заводе все тесты прошли.

person Matheus Moreira    schedule 10.05.2011