是否有RSpec方法对传递给其他对象的参数的返回值进行断言?
说我希望Checker#notify
致电Mailer.send(report)
,我想断言report.errors_count
会返回2
吗?
我非常接近这个:
expect(Mailer).to have_received(:send).with(hash_including(:errors_count => 2))
但这只适用于散列。如果我传递的是PORO
或Struct
,该怎么办? duck_type()
也非常接近,但只是声明方法是定义的,而不是它的返回值(这是一个重要的部分)。
expected_report = Report.new.tap{|r| r.errors_count = 2}
expect(Mailer).to have_received(:send).with(expected_report)
Checker
添加其他我不关心的状态,则会中断答案 0 :(得分:1)
尝试Rspec的#and_call_original
答案 1 :(得分:0)
知道了!您可以将块传递给receive
。它接受传递给方法的参数,因此您可以测试它们上的任何内容:
expect(Mailer).to receive(:send_mail) do |report|
expect(report.error_count).to be(2)
end
编辑:这似乎不适用于间谍(have_received
)版本。测试将为绿色,但不会评估该块。