Не удалось получить авторизованного пользователя в интеграционном тесте с хранилищем сеансов Rails 3.1 / Authlogic / ActiveRecord - PullRequest
3 голосов
/ 14 ноября 2011

Я пытаюсь написать простой интеграционный тест в приложении на Rails 3.1, которое использует Authlogic и ActiveRecord SessionStore, но у меня все в порядке.

Сначала я попробовал классический подход: убедившись, что *Строка 1003 * уже есть в нашей test_helper.rb Затем я написал метод установки, который вызывает activate_authlogic, а затем использует UserSession(@user) для создания сеанса.

Это создало сеанс (что доказано UserSession.find), но при выполнении запроса get на защищенном ресурсе ответом будет перенаправление на форму входа и сеанс будет прерван (т.е. UserSession.find вернет nil)

Я попытался POST-используя электронную почту / пароль, но, похоже, это будет работать только , если я верну хранилище сеансов обратно на cookie_store (что я узнал из этого комментария ).

Переключение хранилища сессий на CookieStore только для тестирования будет возможным, но есть некоторые тесты, которые уже зависят от хранилища ActiveRecord.

Есть ли способ переключить хранилище сессий только для одного теста?Есть ли другое решение этой проблемы, которое я пропускаю?

require 'test_helper'

class ProtectedTest < ActionController::IntegrationTest
  def setup
    activate_authlogic
    @user = Factory(:user, :roles => 'user')
    UserSession.create(@user)
  end

  def test_protected
    https!
    get '/protected'
    assert_response :success
  end
end

1 Ответ

0 голосов
/ 18 ноября 2011

Уважаемые люди из будущего:

Я нашел способ обойти это, запустив тесты, в которых требовались авторизованные пользователи в другой среде, установив ENV ["RAILS_ENV"] перед тем, как включить 'test_helper'. Затем я изменил session_store в этой среде на cookie_store.

ENV["RAILS_ENV"] = "test_cs"
require 'test_helper'
end

class ProtectedTest < ActionController::IntegrationTest
  # ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...