Порядок тестирования Rspec / FactoryGirl от созданного - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь проверить коллекцию заказов по 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 Ответ

2 голосов
/ 12 июня 2019

Возможно, что указанная вами временная метка не сохраняется, и 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). Может быть область, которую вы не видите, которая влияет на порядок.

...