Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec/FactoryGirl测试订单由创建于_Ruby On Rails_Ruby_Rspec_Factory Bot - Fatal编程技术网

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)
。可能有一个你看不到的范围影响订单是的,我刚刚做了,就这样。