2012-05-27 5 views
3

작동하지 않습니다와 Authlogic :카피 바라 + 오이 + 셀레늄 드라이버 내가 authlogic와 @javascript와 오이 테스트를 실행할 때이 내가 얻을 오류입니다

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

이 기능/지원/authlogic 내 authlogic 지원 코드 .rb : @javascript없이

def create_session 
    Session.create(:name => "test", :password => "test-33") 
end 

:

require "authlogic" 
require "authlogic/test_case" 
World(Authlogic::TestCase) 

ApplicationController.skip_before_filter :activate_authlogic 

Before do 
    activate_authlogic 
end 

이 내가 세션을 생성하는 방법이다 , 그것은 authlogic이 활성화되지 않는다는 오류를주지는 않지만 @javascript를 사용하면 오류가 발생합니다. 이 문제를 어떻게 수정합니까?

답변

7

셀레늄과 카피 바라 웹킷은 프로세스를 시작할 때 별도의 스레드를 사용합니다. authlogic_controller : 당신이 다음

Authlogic::Session::Base.controller = (@request && Authlogic::TestCase::RailsRequestAdapter.new(@request)) || controller 

를 수행 activate_authlogic 실행하면이에 대한 스레드 로컬 변수를 설정 바람이. 문제는 @javascript 태그가 붙은 시나리오에서 새 스레드를 사용하기 시작하면 이것이 손실된다는 것입니다.

은 나를 위해, 수정은 너무

module Authlogic 
    module Session 
    module Activation 
     module ClassMethods 
     def controller 
      if !Thread.current[:authlogic_controller] 
      Thread.current[:authlogic_controller] = Authlogic::TestCase::MockController.new 
      end 
      Thread.current[:authlogic_controller] 
     end 
     end 
    end 
    end 
end 

이 acivate_authlogic에서 이루어집니다 무엇을 복제처럼 authlogic 코드를 monkeypatch했다. 테스트 환경 만 패치해야합니다.

+0

오메가와 카피 바라를 폴리스티스트와 함께 javascript_driver (그리고 헤드리스 브라우저로 PhantomJS)를 사용하려고 할 때도 똑같은 문제가 발생했습니다. 이 수정 프로그램은 저에게 효과적이었습니다. – shalott

관련 문제