我正试图在Rspec中处理存根问题。我想了解如何从数组中返回值。
这是我此刻想要存根的内容,
if client.jobs.any?
client.jobs.map do |job|
if job.job_locations.any?
job.job_locations.map do |jl|
if jl.location_id == self.location_id
errors.add(:location_id, "This location is in use with another of the client's jobs")
return false
end
end
end
end
end
我可以存根第一行(客户端有作业),但我不知道如何存根数组的返回值,以便它们在规范测试中运行。
这是相关的代码段
context "location_id matches job_location location_id" do
before do
allow(client_location).to receive(:client).and_return(client)
allow(client).to receive(:jobs).and_return(some_jobs)
allow(some_jobs).to receive(:map).and_return([job])
#eventually I want to get to this
allow_any_instance_of(JobLocation).to receive(:location_id).and_return(1)
allow_any_instance_of(ClientLocation).to receive(:location_id).and_return(1)
end
it "returns false" do
expect(@instance.destroy).to be_falsey
end
end
我应该在spec测试中添加'some_jobs'变量是工厂女孩生成的实例。有些工作等于[some_jobs]。
答案 0 :(得分:0)
如果您将some_jobs
定义为[job]
(例如通过RSpec的let
机制),则无需重新定义地图,您的生产代码将继续执行。通过删除some_jobs.map
,您基本上绕过了生产代码的其余部分。
另外,client_location
,client
,some_jobs
和job
的定义都与您共享的代码段高度相关,应该包含在内。