[英]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.