質問

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を使用することでしょうか?より複雑な検索機能をテストする方法。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top