如何模拟ruby rspec中的模块静态方法?

How to mock module static method in ruby rspec?

我正在尝试编写一些 rspec 测试,我想模拟模块中的静态方法。

设置是这样的:

module MyModule

 def self.my_method
  'end'
 end

在 rspec 里面我想模拟 my_method,像这样:

alow_any_instance_of(MyModule).to(
 receive(:my_method).and_return('not_bla')
)

在工作代码中,方法是这样调用的:MyModule.my_method

当我尝试使用上面的设置时,出现以下错误:

MyModule does not implement #my_method

我在这里找到了答案:https://www.ruby-forum.com/t/modules-and-stub/168721

解决方案代码如下所示:

MyModule.stub(:my_method).and_return('not_bla')

在 RSpec 中存根消息的 new syntax 看起来像这样:

allow(MyModule).to receive(:my_method).and_return('not_bla')

不再推荐的old syntax是这样的:

MyModule.stub(:my_method).and_return('not_bla')