0

シナリオ
「last_week」というモデルに named_scope があります。先週のレコードを取得するだけです。

これをテストしたいのですが、私のアプローチは、返される結果が特定の範囲内にあることをテストすることです。これがクラス メソッドでこの機能をテストする正しい方法かどうかはわかりません。

RSpec、Shoulda、またはその他のサードパーティのクライアント プラグインを使用できません。必要な場合のみ、モカを使用できます。

# Model

class Article < ActiveRecord::Base

  scope :last_week,   :conditions => { :created_at => 1.week.ago..DateTime.now.end_of_day }

end


#Test

class ArticleTest < ActiveSupport::TestCase

  test "named scope :last_week " do
    last_week_range = DateTime.now.end_of_day.to_i - 1.week.ago.to_i
    assert_in_delta last_week_range, Article.last_week.first.created_at - Article.last_week.last.created_at,  last_week_range
  end

end

このアプローチの何が正しいか、何が間違っているかについてのフィードバックを探しています。

4

1 に答える 1

1

まず、スコープが間違っています。コードはオンザフライで実行されるため、日付範囲の条件はサーバーを起動した時間に依存します...

と置換する:

scope :last_week,  lambda { :conditions => { :created_at => 1.week.ago..DateTime.now.end_of_day } }

次に、テストするために、いくつかのレコードを作成し、スコープが適切なレコードを取得するかどうかを確認します。

  • 工場を作る

  • 2 つのレコードを作成する

  • created_at1レコードに1週間+1日前を設定

  • スコープが1つ(適切なもの)のみを取得することを確認してください

于 2012-08-30T20:12:59.790 に答える