我有一个Logger类。我想在函数内部测试,Logger将收到log
调用foo
的调用。
expect(Logger).to receive(:log).with("foo")
Bar.foo()
但在此期间,某些模型回调还会调用Logger.log("euu")
,Logger.log("arr")
,Logger.log("hmm")
和其他许多人。 Rspec似乎失败,因为首先使用其他一些参数调用log
。
我只担心log("foo")
被召唤一次。有没有办法进行这种测试?
答案 0 :(得分:14)
方法是允许调用log
,执行您的操作,然后检查是否已使用预期参数调用log
,如下所示:
allow(Logger).to receive(:log)
Bar.foo
expect(Logger).to have_received(:log).with("foo")
RSpec称这种模式为Spies
答案 1 :(得分:0)
您可以使用Receive Counts:
expect(Logger).to receive(:log).with('foo').at_least(:once)