【发布时间】:2013-08-23 04:24:09
【问题描述】:
是否有一种 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() 也非常接近,但只是断言定义了方法,而不是它的返回值(这是这里的重要部分)。
PS:理想情况下,我想避免做这样的事情:
expected_report = Report.new.tap{|r| r.errors_count = 2}
expect(Mailer).to have_received(:send).with(expected_report)
- 我宁愿测试接口,而不是依赖于用于生成报告的实际类 (quack quack)
- 如果
Checker添加其他我不关心的状态,这将中断
【问题讨论】:
标签: ruby-on-rails ruby unit-testing rspec mocking