Rspec / FactoryGirl测试顺序由created_at

时间:2019-06-12 13:51:28

标签: ruby-on-rails ruby rspec factory-bot

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

还有什么方法可以测试此订单?

谢谢

1 个答案:

答案 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)。您可能看不到某个范围会影响订单。