【发布时间】:2014-01-25 11:32:53
【问题描述】:
在使用 RSpec 编写测试时,我经常需要表达类似的东西
Klass.any_instance_with_id(id).expects(:method)
主要原因是在我的测试中,我经常有应该接收该方法调用的对象可用,但由于 ActiveRecord 在从数据库加载具有该 id 的对象时会创建一个不同的实例,我不能把“期望”放在我自己的实例上
有时我可以存根 find 方法以强制 ActiveRecord 加载我的实例,有时我可以存根其他方法,但是拥有“any_instance_with_id”会让生活变得更加轻松......
无法想象我是第一个遇到这个问题的人......所以如果你们中的任何人找到了“解决方法”,我很高兴知道!
说明需求的示例:
控制器规格:
describe 'an authorized email' do
let(:lead) { create(:lead, status: 'approved') }
it "should invoice its organisation in case the organisation exceeds its credit limit" do
lead.organisation.expects :invoice_leads
get :email
end
end
控制器:
def email
leads = Lead.approved
leads.each do |lead|
lead.organisation.invoice_leads if lead.organisation.credit_limit_exceeded?
end
redirect_to root_path
end
【问题讨论】:
标签: ruby-on-rails rspec