当我了解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包含?测试更复杂的搜索功能的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top