当我了解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;在您的模型中,您可以对两个数组进行排序。但似乎这不应该是必要的。有没有更好的方法来测试这些搜索方法?或者至少是一种普遍接受的正确方式?
答案 0 :(得分:0)
我想我已经得出结论,没有“普遍接受的正确方法”来做到这一点。
我想我的个人解决方案是停止测试简单的named_scopes并使用assert包含?测试更复杂的搜索功能的方法。