named_scopesと検索メソッドをテストする方法は?
-
06-07-2019 - |
質問
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;を実装できると思います。モデル内で両方の配列をソートできるようにします。しかし、それは本当に必要なものではないようです。これらの種類の検索方法をテストするより良い方法はありますか?または、少なくとも一般的に受け入れられている正しい方法ですか?
解決
<!> quot;一般的に受け入れられている正しい方法<!> quot;はないという結論に達したと思います。これを行うには。
個人的な解決策は、単純なnamed_scopesのテストを停止し、assert includeを使用することでしょうか?より複雑な検索機能をテストする方法。
所属していません StackOverflow