gpt4 book ai didi

ruby-on-rails - 与 RSpec 的 has_many 关系中的测试顺序

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:31 24 4
gpt4 key购买 nike

我对 Rails 和 RSpec 不是很有经验,并且经常在编写测试时遇到麻烦。所以,我的下一个麻烦是我不知道如何正确测试模型关系中的顺序。

假设我有这样一个简单的模型:

class Kitchen < ActiveRecord::Base
has_many :orders, -> { order(completed_at: :desc) }
end

对该模型进行简单测试:

require 'rails_helper'

RSpec.describe Kitchen, :type => :model do
before { @kitchen = FactoryGirl.create(:kitchen) }

subject { @kitchen }

describe "orders" do
before do
@kitchen.orders.build(description: "Test description 1",
completed_at: 1.day.ago.localtime)

@kitchen.orders.build(description: "Test description 2",
completed_at: Time.now)
end

it "should be sorted by completion date in descending order" do
expect(@kitchen.orders.first.completed_at).to be > @kitchen.orders.last.completed_at
end
end
end

结果我得到了错误:

Failure/Error: expect(@kitchen.orders.first.completed_at).to be > @kitchen.orders.last.completed_at
expected: > Fri, 15 May 2015 12:21:54 UTC +00:00
got: Thu, 14 May 2015 12:21:54 UTC +00:00

我们将不胜感激。

最佳答案

您正在使用 build。这不会保留到数据库中,因此当您调用 @kitchen.orders.first 时,您不会访问数据库,只是取回您创建的第一个,这是错误的。

改为使用create,然后调用@kitchen.reload 从数据库刷新。

关于ruby-on-rails - 与 RSpec 的 has_many 关系中的测试顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30259689/

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