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