我正在尝试通过created_at
测试订购收集。因为它的时间戳精确到秒,所以当我创建10条记录时,它们具有相同的created_at
值,这导致我的响应不一致。所以我在这里要做的是像
created_at
字段
5.times do |t|
create(:model, created_at: Time.current.advance(days: -1*(t+1))
end
它将created_at
设置得很好,但是当我这样做
Model.all.order(created_at: :desc)
只是忽略它并按ASC
顺序放置。
还有什么方法可以测试此订单?
谢谢
答案 0 :(得分:2)
您提供的时间戳可能没有保存,并且在创建对象时,Rails正在使用其自己的内部时间戳。您可以尝试:
5.times do |t|
thing = create(:model)
thing.update_column(:created_at, Time.current.advance(days: -1*(t+1))
end
这将绕过模型上的任何验证,您应该保存正确的时间戳记,然后应该能够按预期顺序订购它们。
您可以通过将查询结果保存在变量results
中,然后再进行以下操作来进行测试:
expect(results[0].created_at < results[1].created_at).to be true
您可以尝试的另一种方法是YourModel.unscope.where(...).order(created_at: :desc)
。您可能看不到某个范围会影响订单。