0

当我了解 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

但是,如果返回的结果与您提供的顺序不同,则测试可能会失败。我想你可以在你的模型中实现 <=> ,这样你就可以对两个数组进行排序。但似乎这真的不是必需的。有没有更好的方法来测试这些搜索方法?或者至少是普遍接受的正确方式?

4

1 回答 1

0

我想我已经得出结论,没有“普遍接受的正确方法”可以做到这一点。

我想我的个人解决方案是停止测试简单的 named_scopes 并使用断言包含?测试更复杂的搜索功能的方法。

于 2009-12-09T17:53:55.477 回答