Rspec/FactoryGirl 测试订单 created_at

Rspec/FactoryGirl testing order by created_at

我正在尝试通过 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 顺序。

有什么方法可以测试这个订单吗?

谢谢

您提供的时间戳可能没有被保存,并且 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)。可能有一个您看不到的范围正在影响顺序。