2011-09-13 4 views
0

user_typeはユーザーモデル内の列であり、存在=>真でなければなりません。 user_typeにnilを渡すとrspecで拒否されます。しかし、factory_girlは、sqlite3を使用してフィールドにnil user_typeを格納できます。モデルは次のバリデーションを渡します:presence => trueおよびデータベースにまだnilがありません

レール3.1.0を実行しています。 RSpecの2.6.0と2.1.0 factory_girl

//ユーザモデル:

validates :user_type, :presence => true 

//工場女の子定義:

Factory.define :user do |user| 

    user.name     "Test User" 
    user.email     "[email protected]" 
    user.password    "password1" 
    user.password_confirmation "password1" 
    user.status    "active" 
    user.user_type    "employee" 

end 

Factory.define :user_level do |level| 

    level.role     "sales" 
    level.position    "member" 
    level.team     1 
    level.association   :user 
end 

// RSpecの場合:渡さ

it "should reject user type nil" do 
    user = Factory.build(:user, :user_type => nil) 
    user.should_not be_valid 
    end 

    it "should take user type 'employee'" do 
    user = Factory.build(:user, :user_type => 'employee') 
    user.errors[:user_type].should be_empty 
    user.should be_valid 
    end 

どのような考えですか?ありがとう。

答えて

2

Michael Hartlはexcellent Rails tutorialで指摘したとおり、工場の女の子はattr_accessibleをバイパスします。たとえば、Factory Girlを使用して「マジック」列を上書きすることができます。これは検証にも当てはまるでしょうか?

作成と検証のプロセス自体をテストしているので、実際にはUser.newでユーザーを作成する方が良いようです。

+0

ありがとうございました。 User_typeはattr_accessorからuser_typeを削除した後に正常に動作します(事故によってそこに置かれます)。 – user938363

関連する問題