2010-04-14 102 views
1

我在學習如何在Rails中完成單元測試,並且遇到了涉及Authlogic的問題。Authlogic和Rails中的單元/功能測試問題

按照Documentation有使用Authlogic東西在你的測試需要幾件事情:

test_helper.rb中:

require "authlogic/test_case" 

class ActiveSupport::TestCase 
    setup :activate_authlogic 
end 

然後在我的功能測試,我可以登錄的用戶:

UserSession.create(users(:tester)) 

這個問題似乎源於test_helper.rb中的setup :activate_authlogic行,只要包含它,runni時會出現以下錯誤NG功能測試:

NoMethodError: undefined method `request=' for nil:NilClass 
    authlogic (2.1.3) lib/authlogic/controller_adapters/abstract_adapter.rb:63:in `send' 
    authlogic (2.1.3) lib/authlogic/controller_adapters/abstract_adapter.rb:63:in `method_missing' 

如果我刪除setup :activate_authlogic並添加代替Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)到test_helper.rb中,我的功能測試似乎工作,但現在我的單元測試失敗:

NoMethodError: undefined method `params' for ActiveSupport::TestCase:Class 
    authlogic (2.1.3) lib/authlogic/controller_adapters/abstract_adapter.rb:30:in `params' 
    authlogic (2.1.3) lib/authlogic/session/params.rb:96:in `params_credentials' 
    authlogic (2.1.3) lib/authlogic/session/params.rb:72:in `params_enabled?' 
    authlogic (2.1.3) lib/authlogic/session/params.rb:66:in `persist_by_params' 
    authlogic (2.1.3) lib/authlogic/session/callbacks.rb:79:in `persist' 
    authlogic (2.1.3) lib/authlogic/session/persistence.rb:55:in `persisting?' 
    authlogic (2.1.3) lib/authlogic/session/persistence.rb:39:in `find' 
    authlogic (2.1.3) lib/authlogic/acts_as_authentic/session_maintenance.rb:96:in `get_session_information' 
    authlogic (2.1.3) lib/authlogic/acts_as_authentic/session_maintenance.rb:95:in `each' 
    authlogic (2.1.3) lib/authlogic/acts_as_authentic/session_maintenance.rb:95:in `get_session_information' 
    /test/unit/user_test.rb:23:in `test_should_save_user_with_email_password_and_confirmation' 

我在做什麼錯?

回答

8

在您的單元測試類中放置setup:activate_authlogic類,而不是在test_helper中的ActiveSupport :: TestCase聲明中。

例如

​​
3

我不得不像這樣包含Authlogic測試用例模塊,以便讓事情順利進行。

class ExampleControllerTest < ActionController::TestCase 
    include Authlogic::TestCase 
    setup :activate_authlogic 
end 

我不知道爲什麼Authlogic將不包括本身我的系統上......但代碼(在authlogic/test_case)沒有我的系統上運行:

::Test::Unit::TestCase.send(:include, TestCase) if defined?(::Test::Unit::TestCase) 
+0

我也不得不要求'authlogic/test_case',但是我的設置可能有些不可思議。 – AndrewO 2011-03-16 05:58:43

2

的setup:authlogic行需要位於ActionController :: TestCase類中,而不是ActiveSupport :: TestCase。

裏面你test_helper,把這個在:

class ActionController::TestCase 
    setup :activate_authlogic 
    end