如何使用 Mocha 在控制器中存根模块方法
How to stub a module method inside a controller with Mocha
我有一个这样的 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) 使用 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
我有一个这样的 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) 使用 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