2012-05-27 68 views
3

這是我的錯誤,當我運行一個測試黃瓜與@javascript與authlogic:Authlogic與水豚+黃瓜+硒驅動程序無法正常工作

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

這是在功能/支持/ authlogic我authlogic支持代碼.RB:

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

ApplicationController.skip_before_filter :activate_authlogic 

Before do 
    activate_authlogic 
end 

這是我如何創建一個會話:

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

沒有@javascript ,它不會給我關於authlogic沒有被激活的錯誤,但它使用了@javascript。我該如何解決這個問題?

回答

7

Selenium和capybara-webkit在啓動進程時使用單獨的線程。當您運行activate_authlogic它下面

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

這捲起設置一個線程局部變量:authlogic_controller。問題在於,當您在使用@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代碼。確保你只修補你的測試環境。

+0

當我試圖用Poltergeist作爲javascript_driver(和PhantomJS作爲無頭瀏覽器)時,我遇到了同樣的問題。此修復程序適用於我。 – shalott