Rails测试/单元测试辅助方法,NoMethodError:未定义方法

时间:2013-03-18 14:29:59

标签: ruby-on-rails module helper testunit

如何避免此错误:

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 个答案:

答案 0 :(得分:0)

Helper方法可用于控制器实例,而不是测试本身。要么直接在测试中包含帮助程序(凌乱),要么使用控制器(或包含帮助程序的其他对象)来调用该方法。

要使用控制器进行测试,可以在ActionController::TestCase中使用@controller实例变量:

class LocationControllerTest < ActionController::TestCase

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