Проблема с Authlogic и модульными / функциональными тестами в Rails - PullRequest
1 голос
/ 14 апреля 2010

Я изучаю, как выполняется модульное тестирование в Rails, и столкнулся с проблемой, связанной с Authlogic.

Согласно Документации есть несколько вещей, необходимых для использования Authlogic в ваших тестах:

test_helper.rb:

require "authlogic/test_case"

class ActiveSupport::TestCase
  setup :activate_authlogic
end

Тогда в моих функциональных тестах я могу войти в систему:

UserSession.create(users(:tester))

Кажется, проблема связана с строкой setup :activate_authlogic в test_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'

Если я удалю 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'

Что я делаю не так?

Ответы [ 4 ]

8 голосов
/ 14 апреля 2010

Поместите класс setup: activ_authlogic в свой класс модульных тестов, а не в объявление ActiveSupport :: TestCase в test_helper.

, например

class ExampleControllerTest < ActionController::TestCase
    setup :activate_authlogic
end
3 голосов
/ 26 августа 2011

http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/TestCase
Все очень хорошо описано по ссылке выше.

3 голосов
/ 09 июня 2010

Я должен был включить модуль теста 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)
2 голосов
/ 16 сентября 2010

Строка setup: authlogic должна находиться в классе ActionController :: TestCase, а не в ActiveSupport :: TestCase.

Внутри своего test_helper вставьте это:

  class ActionController::TestCase
    setup :activate_authlogic
  end
...