簡體   English   中英

如何模擬Ruby模塊功能?

[英]How to mock Ruby Module functions?

如何在項目中模擬自編寫模塊的模塊功能?

鑒於模塊和功能

module ModuleA::ModuleB
  def self.my_function( arg )
  end
end

這就是所謂的

ModuleA::ModuleB::my_function( with_args )

當我在編寫規范的函數中使用它時,我應該如何模擬它?


加倍它( obj = double("ModuleA::ModuleB") )對我來說沒有意義,因為函數是在模塊上調用而不是在對象上調用。

我已經嘗試過它( ModuleA::ModuleB.stub(:my_function).with(arg).and_return(something) )。 顯然,它沒有用。 stub沒有在那里定義。

然后我用should_receive嘗試了它。 再次NoMethodError

模擬模塊及其功能的首選方法是什么?

給出您在問題中描述的模塊

module ModuleA ; end

module ModuleA::ModuleB
  def self.my_function( arg )
  end
end

和被測函數,它調用模塊函數

def foo(arg)
  ModuleA::ModuleB.my_function(arg)
end

然后你可以測試foo調用myfunction如下所示:

describe :foo do
  it "should delegate to myfunction" do
    arg = mock 'arg'
    result = mock 'result'
    ModuleA::ModuleB.should_receive(:my_function).with(arg).and_return(result)
    foo(arg).should == result
  end
end

對於rspec 3.6,請參閱如何在RSpec期望語法中模擬類方法?

為了避免僅鏈接答案,這里是Andrey Deineko的答案副本:

allow(Module)
  .to receive(:profile)
  .with("token")
  .and_return({"name" => "Hello", "id" => "14314141", "email" => "hello@me.com"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM