Тестирование RSpec в Rails и код состояния HTTP 304 - PullRequest
2 голосов
/ 17 апреля 2011

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

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

Ответы [ 2 ]

1 голос
/ 10 мая 2011

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

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

1 голос
/ 17 апреля 2011

304 это хорошая вещь. В этом случае это именно то, что ожидается (и желательно), даже если это может создать проблемы для некоторых ваших тестов. 304 означает, что ваш веб-сервер и клиент обмениваются данными таким образом, чтобы разрешить кэширование ответа веб-сервера.

Я не совсем знаком с Rails, но подозреваю, что есть встроенный механизм, который кэширует ваши ответы. Вот статья Rails о кешировании:
http://guides.rubyonrails.org/caching_with_rails.html

И вот что выглядит как способ отключить кэширование на уровне «Контроллер / Действие» (игнорируйте части о фреймах ... также это может быть не лучшим способом):
http://arjunghosh.wordpress.com/2008/04/29/how-to-force-the-browser-to-not-cache-in-rails/

...