Rails中的Authlogic和单元/功能测试问题

mma*_*lay 1 unit-testing ruby-on-rails authlogic

我正在学习如何在Rails中完成单元测试,并且我遇到了涉及Authlogic的问题.

根据文档,在测试中使用Authlogic的东西需要一些东西:

test_helper.rb中:

require "authlogic/test_case"

class ActiveSupport::TestCase
  setup :activate_authlogic
end
Run Code Online (Sandbox Code Playgroud)

然后在我的功能测试中我可以登录用户:

UserSession.create(users(:tester))
Run Code Online (Sandbox Code Playgroud)

这个问题似乎源于setup :activate_authlogictest_helper.rb中的一行,只要包含它,运行功能测试时会出现以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

如果我删除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'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Rob*_*rco 8

将setup:activate_authlogic类放在单元测试类中,而不是放在test_helper中的ActiveSupport :: TestCase声明中.

例如

class ExampleControllerTest < ActionController::TestCase
    setup :activate_authlogic
end
Run Code Online (Sandbox Code Playgroud)