gpt4 book ai didi

ruby-on-rails - Rspec 不能 stub where 或 find_by_,只能找到

转载 作者:行者123 更新时间:2023-12-04 05:57:59 24 4
gpt4 key购买 nike

我将分享几对运行代码和测试代码。基本上,测试代码仅在我使用 find 时才有效。在对象类上,但问题是 find是我不想使用的一种方法,因为我不是在寻找主键!

方法一 : stub :wherePlan.all这样就可以调用 first

#run code
@current_plan = Plan.where(stripe_subscription_id: event.data.object.lines.data.first.id).first

#test code
@plan = Plan.new #so this is the first Plan that I'd like to find
Plan.stub(:where).and_return(Plan.all)

#result of @current_plan (expecting @plan)
=> nil

方法二 : 链桩 :where:first
#run code
@current_plan = Plan.where(stripe_subscription_id: event.data.object.lines.data.first.id).first

#test code
@plan = Plan.new #so this is the first Plan that I'd like to find
Plan.stub_chain(:where, :first).and_return(@plan)

#result of @current_plan (expecting @plan)
=> nil

方法三 : stub 定制 :find_by
#run code
@current_plan = Plan.find_by_stripe_subscription_id(event.data.object.lines.data.first.id)

#test code
@plan = Plan.new
Plan.stub(:find_by_stripe_subscription_id).and_return(@plan)

#result of @current_plan (expecting @plan)
=> nil

方法四 : stub :find作品!但是我无法通过主键找到...所以我理想情况下需要方法 3 才能工作...
#run code
@current_plan = Plan.find(2) #for giggles, to make sure the stub is ignoring the 2 argument

#test code
@plan = Plan.new
Plan.stub(:find).and_return(@plan)

#result of @current_plan (expecting @plan)
=> @plan

我想另一个答案是我如何创造性地使用 :find有争论,即使我明白这不是最佳实践......

最佳答案

您可以 stub 这些方法。所有这些测试都通过了:

require 'rails_helper'

RSpec.describe Foo, type: :model do
let(:foo) { double(name: "foo") }

it "works with find" do
expect(Foo).to receive(:find).and_return(foo)
expect(Foo.find(1)).to eq foo
end

it "works with find_by" do
expect(Foo).to receive(:find_by_name).and_return(foo)
expect(Foo.find_by_name("foo")).to eq foo
end

it "works with where" do
expect(Foo).to receive(:where).and_return([ foo ])
expect(Foo.where(name: "foo")).to eq [foo]
end
end

关于ruby-on-rails - Rspec 不能 stub where 或 find_by_,只能找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com