【问题标题】:Rspec/FactoryGirl testing order by created_atcreated_at 的 Rspec/FactoryGirl 测试订单
【发布时间】:2019-10-27 01:33:17
【问题描述】:

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 已保存。似乎激活了一些默认排序。我现在正在检查。
    • 您可以尝试的另一件事是YourModel.unscope.order(created_at: :desc)。可能存在您看不到的影响订单的范围
    • 没错,我就是这么做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多