2011-09-14 9 views
0

改訂:ここでのエラーは、複数の異なるモデルを同じハッシュに格納していたことです。これは、私がどのように配列を構築していたのか、内部的な方法でした。とにかく、私はここでエラーのために謝罪します。どのように私がそれに尋ねられたかに疑問に答える方法はありませんでした。RSpec before(:each)ブロックの検証エラーが奇妙な動作をしています

コントローラスペックにRSpec before(:each)ブロックがあります。私の例のモデルはステータスフィールドと次の検証があります。

class Model < ActiveRecord::Base 
    STATI = [ "vacant", "deleted", "deactivated"] 
    ... 
    validates :status, :inclusion => { :in => STATI } 
    ... 
    end 

をそして、私の仕様で、私は次のコードを持っています。

describe Controller do 
    ... 
    describe "some methods" do 
     before(:all) do 
     @models = [] 
     10.times { @models << Factory(:model) } 
     end 
     before(:each) do 
     @models.each { |m| m.update_attributes(:status => "vacant") } 
     end 
     ... 
    end 
    end 

私が仕様を実行すると、他のすべてのブロックがうまく動作します。 ActiveRecord :: RecordInvalid: 検証に失敗しました:ステータスはリスト に含まれておらず、m.update_attributes(:status => "vacant")という行を指しています。

ありがとうございました。

+0

「Factory.model」でどのようなステータスを作成しますか? – apneadiving

+2

側注: "@models = 10.times.map {工場(:モデル)}" または "@models = FactoryGirl.create_list(:モデル、10)" – tokland

+0

apneadiving、工場は同じステータス使用: "空き" を –

答えて

0

私はあなたのモデル定義に次のようにしようとするだろう:

class Model < ActiveRecord::Base 
    STATI = %w[vacant deleted deactivated] 
    ... 
    validates :status, :inclusion => STATI 
    ... 
end 

% wは文字列の配列を作成するための好適な構文で、あなたの配列定義から",の除去を可能にします。

あなたは、封入検証のため:in =>を必要としません。

関連する問題