Вопрос

Когда я узнал о proxy_options, я начал использовать его для тестирования всех своих именованных областей. Но потом я обнаружил, что просто копирую хэш условий прямо из модели, так что это не было проверкой правильности результатов:

  po = {:conditions => "foo.created_at <= '#{Time.now.beginning_of_week}'"}
  assert_equal po, Foo.created_this_week

Другой подход состоит в том, чтобы придумать положительные и отрицательные примеры и посмотреть, включены ли они в результаты или нет:

  this_week = Foo.make(:created_at => Time.now)
  last_week = Foo.make(:created_at => 1.week.ago)
  assert Foo.created_this_week.include?(this_week)
  assert !Foo.created_this_week.include?(last_week)

Но это не поможет проверить границы, и когда все станет сложнее, у вас будет целый длинный список утверждений ?. Похоже, было бы лучше получить ожидаемый набор результатов, а затем просто проверить, чтобы убедиться, что он соответствует:

  Foo.make(:created_at => 1.week.ago)
  results = [Foo.make(:created_at => Time.now)]
  assert_equal results, Foo.created_this_week

Но тогда проверка может завершиться неудачей, если результаты будут возвращены в другом порядке, чем вы указали. Я думаю, вы могли бы реализовать & Lt; = & Gt; в вашей модели, чтобы вы могли отсортировать оба массива. Но похоже, что это не должно быть необходимым. Есть ли лучший способ проверить эти методы поиска? Или, по крайней мере, общепринятый правильный путь?

Это было полезно?

Решение

Я думаю, что пришел к выводу, что & общепринятого правильного пути не существует "!" сделать это.

Полагаю, мое личное решение - прекратить тестирование простых named_scopes и использовать assert include? метод для тестирования более сложной поисковой функциональности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top