Ruby on rails Rspec/FactoryGirl测试订单由创建于
我正试图通过在上创建的Ruby on rails Rspec/FactoryGirl测试订单由创建于,ruby-on-rails,ruby,rspec,factory-bot,Ruby On Rails,Ruby,Rspec,Factory Bot,我正试图通过在上创建的来测试排序集合。因为它是精确到秒的时间戳,当我创建10条记录时,它们在值处创建了相同的created\u,这导致我的响应不一致。所以我在这里做的是在字段手动设置created\u,就像 5.times do |t| create(:model, created_at: Time.current.advance(days: -1*(t+1)) end 它将created\u设置为很好,但当我这样做时 Model.all.order(在::desc创建)它只是忽略它并放入
来测试排序集合。因为它是精确到秒的时间戳,当我创建10条记录时,它们在
值处创建了相同的created\u,这导致我的响应不一致。所以我在这里做的是在
字段手动设置created\u,就像
5.times do |t|
create(:model, created_at: Time.current.advance(days: -1*(t+1))
end
它将created\u设置为很好,但当我这样做时
Model.all.order(在::desc创建)
它只是忽略它并放入ASC
order
还有什么方法可以测试这个订单吗
谢谢您提供的时间戳可能没有保存,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
expect(结果[0]。在
您可以尝试的另一件事是YourModel.unscope.where(…).order(在::desc创建)
。可能存在您看不到的影响订单的作用域。它已保存。似乎激活了一些默认顺序。我现在正在检查。您可以尝试的另一件事是YourModel.unscope.order(创建于::desc)
。可能有一个你看不到的范围影响订单是的,我刚刚做了,就这样。