如何使用 Mocha 在控制器中存根模块方法
Posted
技术标签:
【中文标题】如何使用 Mocha 在控制器中存根模块方法【英文标题】:How to stub a module method inside a controller with Mocha 【发布时间】:2019-04-08 03:03:36 【问题描述】:我有一个这样的 Sinatra 应用程序:
my_module.rb
module MyModule
def my_method
"yay"
end
end
app.rb
get "/my_module" do
puts my_method
end
我正在尝试使用Minitest
和mocha
对my_method
进行存根测试。
def test_my_method
MyModule.stubs(:my_method).returns("stubbed")
get "/my_module"
end
但这似乎不起作用,因为仍然调用了原始方法。关于如何做到这一点的任何想法?谢谢!
【问题讨论】:
【参考方案1】:我发现了两种不同的方法来实现这一点。
1) 使用stub any instance gem。
有了这个 gem,我可以存根 Sinatra::Application
的任何实例。所以解决方案是这样的:
def test_my_method
Sinatra::Application.stub_any_instance(:my_method, "stubbed") do
get "/my_module"
# => stubbed
end
end
2) 使用mocha
的any_instance。
此解决方案遵循相同的原则。只需使用mocha
s 方法。
def test_my_method
Sinatra::Application.any_instance.stubs(:my_method).returns("stubbed")
get "/my_module"
# => stubbed
end
【讨论】:
以上是关于如何使用 Mocha 在控制器中存根模块方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Mocha / Jasmine 在控制器方法中为 if else 案例获得 Karma 覆盖?