期望至少收到一次带有特定参数的参数

问题描述 投票:0回答:2

我有一个 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")
被调用一次。有没有办法进行这种测试?

rspec
2个回答
29
投票

方法是允许调用

log
,做你的事情,然后检查
log
是否已使用预期参数调用,如下所示:

allow(Logger).to receive(:log)
Bar.foo
expect(Logger).to have_received(:log).with("foo")

RSpec 将此模式称为 Spies


10
投票

您可以使用接收计数:

expect(Logger).to receive(:log).with('foo').at_least(:once)
© www.soinside.com 2019 - 2024. All rights reserved.