Rspec如何存根模块实例方法?

Ang*_*ian 5 rspec ruby-on-rails

B.rb看起来像:

module A
   module B

     def enabled? xxx
        xxx == 'a'
     end

     def disabled? xxx
       xxx != 'a'
     end
   end
end
Run Code Online (Sandbox Code Playgroud)

另一个C.rb如:

module YYY
  class C
  include A::B

  def a_method 
     if(enabled? xxx) 
       return 'a'
     return 'b'
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我想编写单元测试来测试a_method函数,

 describe :a_method do
    it 'returns a' do
       ###how to sub enabled? method to make it return true....
    end
 end 
Run Code Online (Sandbox Code Playgroud)

启用?是模型中的实例方法,我试过了

A::B.stub.any_instance(:enabled).and_return true
Run Code Online (Sandbox Code Playgroud)

它不起作用。

有人可以帮助我吗?

小智 5

您打错了。您A::B是一个模块,所以您没有实例,实例是类。您也忘记了问号。

尝试使用以下方法存根模块的静态方法:

A::B.stub(:enabled?).and_return true
Run Code Online (Sandbox Code Playgroud)

在第二个示例(如果需要)中,请尝试以下操作:

YYY::C.any_instance.stub(:a_method).and_return something
Run Code Online (Sandbox Code Playgroud)

但是我认为您正在尝试enabled?在类中对方法进行存根YYY::C,因此您需要使用以下方法:

YYY::C.any_instance.stub(:enabled?).and_return true
Run Code Online (Sandbox Code Playgroud)

然后在调用:a_method时,enabled?将返回true。