authlogic не работает с капибарой при использовании драйвера селена - PullRequest
5 голосов
/ 04 августа 2011

У меня есть все мои тесты на капибару, работающие с моей областью авторизованных участников с использованием драйвера по умолчанию, но когда я изменяю один тест на использование драйвера селена, так как он содержит ajax, он выдает мою ошибку theis:

You must activate the Authlogic::Session::Base.controller with a controller object before creating objects

Что-то работает с драйвером по умолчанию для authlogic, поэтому что-то должно быть связано с селеном ??

Я включил Authlogic :: TestCase в моем spec_helper и

activate_authlogic
    domain.user_sessions.create(user)

в перед каждым.

Кто-нибудь поможет мне с этим, пожалуйста?

спасибо, Рик

Ответы [ 3 ]

5 голосов
/ 28 октября 2011

Я разместил решение по огурцам здесь: Войдите в систему через authlogic без необходимости каждый раз заполнять форму

Для интеграционных тестов RSpec это похоже.

В вашемspec_helper.rb:

require "authlogic/test_case"
RSpec.configure do |config|
  ...
  config.include Authlogic::TestCase
  ApplicationController.skip_before_filter :activate_authlogic
  config.before(:each, :type => :request) do
    activate_authlogic
    UserSession.create(User.find_by_email!(email))
  end
  ...
end

Очевидно, что если ваш сайт не только для входа, вы можете переместить две строки в config.before в блок before в вашем конкретном тесте для входа в спецификации.Если вы оставите все как есть, вы можете удалить сеанс с помощью UserSession.find.destroy или, очевидно, перейти по ссылке выхода из системы (если это имеет больше смысла в вашей спецификации).

3 голосов
/ 01 сентября 2011

Я думаю, что следующий код будет работать для активации authlogic:

Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)

Сказав это, я предпочитаю определять шаг, который фактически идет в форму входа в систему, заполняет ее и входит в систему. Это медленнее, но я редко запускаю весь комплект тестов интеграции вручную, обычно об этом заботится сервер непрерывной интеграции.

0 голосов
/ 24 марта 2012

Это работает для меня (Rails 3.2.1):

В spec_helper.rb

require 'authlogic/test_case' 
include Authlogic::TestCase

В В моем controller_specs:

 def valid_session                                                                                                                                                                  
    activate_authlogic # run before tests are executed                                                                                                                               
    user = Factory(:user)                                                                                                                                                            
    UserSession.create(user, true) #create an authlogic session                                                                                                                      
    @user = @controller.current_user                                                                                                                                                 
    {}                                                                                                                                                                               
  end       
  # exemple of valid_session utilization in your test:
  #    valid_session
  #    user_id = @user.id
  #     
  #    or
  #
  #    get :index, {}, valid_session                                                                                                                                                  

Наслаждайтесь!

...