将变量注入Ruby函数

时间:2011-07-17 08:35:13

标签: ruby unit-testing

我正在编写一些类似于

的现有Ruby代码的测试
module Foo
  module Bar

    private

    def function_i_want_to_test (a, b)
      if controller.is_something? a, b
        puts a
      else
        puts b
      end
    end
  end
end

变量controller从其他地方神奇地插入到函数中。要从我的测试中访问此函数,我可以在我的测试类中执行include Foo::Bar并在之后正常调用该函数。不幸的是,由于未设置controller,因此无效。我有什么想法可以从我的测试中设置controller变量吗?

1 个答案:

答案 0 :(得分:1)

模块似乎假设“控制器”在它所包含的类/模块中可用。也许它包含在Rails ActionController类中?此外,它可能意味着是方法调用,而不是局部变量。所以,做这样的事情:

class MyClass
  include Foo::Bar

  def controller
    # Do stuff.
  end
end

对于测试,您还可以使用Mocha(或其他模拟库)来简化该过程。

def test_my_thing
  thing = Object.new
  thing.extend(Foo::Bar)
  thing.expects(:controller).returns("whatever")
end