2012-01-13 11 views
1

を使用して属性のデフォルト値をテストする方法をここに私のテストです:RSpecのは、コールバック

require 'spec_helper' 

describe League do 

    it 'should default weekly to false' do 
     league = Factory.create(:league, :weekly => nil) 
     league.weekly.should == false 
    end 
    end 

end 

そして、ここに私のモデルです:

class League < ActiveRecord::Base 

    validates :weekly, :inclusion => { :in => [true, false] } 

    before_create :default_values 

    protected 

    def default_values 
    self.weekly ||= false 
    end 

end 

私は私のテストを実行すると、私は次のエラーメッセージが表示されます:

Failure/Error: league = Factory.create(:league, :weekly => nil) 
ActiveRecord::RecordInvalid: 
    Validation failed: Weekly is not included in the list 

私はリーグ記録を作成し、コールバックをトリガしようとする夫婦の異なるアプローチを試してみたが、私は持っていませんでした幸運。 RSpecを使ってコールバックをテストすることについて私が見逃していることはありますか?

+0

before_createがトリガーされる前に検証がモデルで実行されるため、エラーが発生します。私はこのルートに行くことに決めました:http://stackoverflow.com/questions/6715468/attr-accessor-default-values/8775320#8775320。今すぐすべての作品。 – keruilin

答えて

1

あなたが言っていることは、作成する前に、毎週偽に設定してから、実際に週ごとにnilに設定してfalseを上書きすることだと思います。

ちょうどあなたのテストで

require 'spec_helper' 

describe League do 

    it 'should default weekly to false' do 
     league = Factory.create(:league) # <= this line changed 
     league.weekly.should == false 
    end 
    end 

end 

を行います。明示的にnilを設定する必要はありません。

+0

新しいRSpec3では、(league.weekly)が偽であると予想されるはずです – moeabdol

関連する問題