Как проверить named_scopes и методы поиска? - PullRequest
0 голосов
/ 24 октября 2009

Когда я узнал о 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

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

1 Ответ

0 голосов
/ 09 декабря 2009

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

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

...