Rspec - Вы должны активировать Authlogic :: Session :: Base.controller - я уже пробовал общие предложения

Я знаю, что на этот вопрос отвечали много раз, но существующие ответы не решают мою проблему.

Я хочу запустить свои тесты rspec для контроллеров. Мне нужно аутентифицировать пользователя через Authlogic.

Как многие из вас сказали (в других подобных вопросах), я добавил в файл spec_helper.rb:

require "authlogic/test_case"
include Authlogic::TestCase

и activate_authlogic перед каждым в my events_controller_spec.rb:

...
  before :each do
    activate_authlogic
    user = FactoryGirl.create(:user)
    UserSession.create(user)
  end
...

но при запуске rspec я всегда получаю печально известное сообщение об ошибке:

Failure/Error: UserSession.create(user)
     Authlogic::Session::Activation::NotActivatedError:
       You must activate the Authlogic::Session::Base.controller with a controller object before creating objects

Вы видите, что на нем не так?

Любые предложения действительно приветствуются.

Спасибо!

ps.

Используемые версии: - rails 3.2 - rspec (2.11.0) - rspec-core (2.11.1)


person Alessandro De Simone    schedule 17.02.2013    source источник


Ответы (3)


Я не понимаю, нашли ли вы решение, но вот код, который я использую для своих контроллеров Rspec. Вы можете поймать ошибку недействительного пользователя перед созданием сеанса!

spec / spec_helper.rb

def log_in(user)
  user.should_not be_nil
  session = UserSession.create!(user, false)
  session.should be_valid
  session.save
end

спецификации / контроллеры / ...

require 'spec_helper'
require 'authlogic/test_case'

describe xxxController do
  setup :activate_authlogic

  context "user logged" do
    before(:each) do
      @user = Factory(:user)
      log_in(@user)
    end
  end
end
person pierallard    schedule 27.02.2013

попробуйте использовать setup :activate_authlogic или Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self) вместо activate_authlogic, может это поможет

person Shamir K.    schedule 22.02.2013
comment
Спасибо, Шамир, но не работает. Я думаю, что первый вариант хорош, если вы воспользуетесь модульным тестом. Я пробовал Authlogic :: Session :: Base.controller = Authlogic :: ControllerAdapters :: RailsAdapter.new (self), но получаю неопределенный метод cookie_jar для nil: NilClass. - person Alessandro De Simone; 22.02.2013
comment
Отлаживая код, я вижу, что activate_authlogic возвращает nil, глядя на документы Authlogic, он должен возвращать что-то не nil. Есть другие идеи? - person Alessandro De Simone; 22.02.2013

После многих попыток я обнаружил еще одну проблему:

  • пользователь, созданный FactoryGirl, не был действительным пользователем
  • вместо "before: each" иногда я пробовал "before: all", и это добавляло шума при исправлении ошибок.

Простите за "не очень полезный" вопрос :)

person Alessandro De Simone    schedule 23.02.2013