如何使用Mocha在控制器内部存根模块方法

时间:2018-11-04 16:17:32

标签: ruby module mocha sinatra stub

我有一个类似Sinatra的应用程序:

my_module.rb

module MyModule
  def my_method
    "yay"
  end
end

app.rb

get "/my_module" do 
  puts my_method
end

我正尝试在my_methodMinitest的测试中存根mocha

def test_my_method
  MyModule.stubs(:my_method).returns("stubbed")
  get "/my_module"
end

但这似乎不起作用,因为仍然调用了原始方法。有关如何执行此操作的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

我发现了两种不同的实现方法。

1)使用stub any instance gem

有了这个宝石,我可以将Sinatra::Application的任何实例都存根。因此,解决方案如下所示:

def test_my_method
  Sinatra::Application.stub_any_instance(:my_method, "stubbed") do
    get "/my_module"
    # => stubbed
  end
end

2)使用mocha的{​​{3}}。

此解决方案遵循相同的原理。仅使用mocha的方法。

def test_my_method
  Sinatra::Application.any_instance.stubs(:my_method).returns("stubbed")
  get "/my_module"
  # => stubbed
end