Rspec模拟ActiveRecord :: Relation而不是类对象

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

我想从端点模拟一行:

InquiryProcessFilters::CompanyName.new(params[:filters][:company_name].downcase).call

所以我嘲笑:

let(:company_name_filter_mock) { instance_double(InquiryProcessFilters::CompanyName) }

before do
  allow(InquiryProcessFilters::CompanyName).to(receive(:new).and_return(company_name_filter_mock))
  allow(company_name_filter_mock).to receive(:call).and_return(second_inquiry_process)
end

问题是我的端点类返回的结果为ActiveRecord_Relation,这是我想要的结果。如何更新我的模拟来实现?

ruby-on-rails ruby rspec mocking grape
1个回答
0
投票

我可以看到两个选项。

[如果您担心不触碰规范中的DB并且足以获取Enumerable,则将一个数组分配给second_inquiry_process,例如:

let(:second_inquiry_process) { [inquiry_process_instance] }

或使用FactoryBot

let(:second_inquiry_process) { build_list :inquiry_process, 1 }

[如果您想拥有完整的AR关系(我想是这样),请在db中创建记录,并将它们分配给变量,例如:

let(:inquiry_process_instance) { create :inquiry_proces }
let(:second_inquiry_process) { InquiryProcess.where(id: inquiry_process_instance.id) }
© www.soinside.com 2019 - 2024. All rights reserved.