繁体   English   中英

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

[英]Problem with Authlogic and Unit/Functional Tests in Rails

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

根据文档 ,在测试中使用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行,只要包含该行,运行功能测试时都会出现以下错误:

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'

我究竟做错了什么?

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

例如

class ExampleControllerTest < ActionController::TestCase
    setup :activate_authlogic
end

为了使工作正常,我必须包括这样的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)

http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/TestCase
上面的链接对一切进行了很好的描述。

设置:authlogic行需要位于ActionController :: TestCase类中,而不是ActiveSupport :: TestCase中。

在您的test_helper中,将其放入:

  class ActionController::TestCase
    setup :activate_authlogic
  end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM