Метод вспомогательных тестов Rails / модульного тестирования, NoMethodError: неопределенный метод

Как избежать этой ошибки:

Error: test_update_location(LocationControllerTest)
NoMethodError: undefined method `show_previous_version' for test_update_location(LocationControllerTest):LocationControllerTest/usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionpack-2.1.1/lib/action_controller/test_process.rb:467:in `method_missing'

Я хочу проверить вспомогательный метод show_previous_version определяется в app/helpers/description_helper.rb:

def show_previous_version(obj)
    ...
  return html
end

В app/helpers/application _helper.rb:

module ApplicationHelper
  .....
  require_dependency 'description_helper'
  ...
end

В test/functional/location_controller_test.rb

def test_update_location
  ...
  loc = Location.find(loc.id)
  html = show_previous_version(loc)
  ...
end

Когда я запускаю тесты, я получаю:

Error: test_update_location(LocationControllerTest)
NoMethodError: undefined method `show_previous_version' for test_update_location(LocationControllerTest):LocationControllerTest/usr/local/rvm/gems/ruby-1.9.3-p327/gems/actionpack-2.1.1/lib/action_controller/test_process.rb:467:in `method_missing'

1 ответ

Решение

Вспомогательные методы доступны для экземпляра контроллера, а не для самого теста. Либо включите помощника непосредственно в тест (грязный), либо используйте контроллер (или некоторый другой объект, который включает помощника) для вызова этого метода.

Чтобы протестировать использование контроллера, вы можете использовать переменную экземпляра @controller внутри ActionController::TestCase:

class LocationControllerTest < ActionController::TestCase

  def test_update_location
    ...
    loc = Location.find(loc.id)
    html = @controller.show_previous_version(loc)
    ...
  end
end
Другие вопросы по тегам