簡體   English   中英

如何測試named_scopes和搜索方法?

[英]How to test named_scopes and search methods?

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

但是,如果返回的結果順序與您提供的順序不同,則測試可能會失敗。 我猜您可以在模型中實現<=>,以便可以對兩個數組進行排序。 但這似乎並不是必須的。 有沒有更好的方法來測試這些搜索方法? 或至少是一種普遍接受的正確方法?

我認為我得出的結論是,沒有“通常公認的正確方法”可以做到這一點。

我想我的個人解決方案是停止測試簡單的named_scopes並使用assert包含? 測試更復雜的搜索功能的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM