2011-10-15 22 views
10

Yeni bir kullanıcı oluşturmanın da yönetici ayarlarından oluşup oluşmadığını test etmek için yeni bir test yazdım.Rspec doğrulaması başarısız oldu - özniteliği boş bırakılamaz ama boş değil

describe User do 

    before(:each) do 
    @attr = { 
     :name => "Example User", 
     :email => "[email protected]", 
     :admin => "f" 
    } 
    end 

    it "should create a new instance given valid attributes" do 
    User.create!(@attr) 
    end 

    it "should require a name" do 
    no_name_user = User.new(@attr.merge(:name => "")) 
    no_name_user.should_not be_valid 
    end 

    it "should require an email" do 
    no_email_user = User.new(@attr.merge(:email => "")) 
    no_email_user.should_not be_valid 
    end 

    it "should require an admin setting" do 
    no_admin_user = User.new(@attr.merge(:admin => "")) 
    no_admin_user.should_not be_valid 
    end 

end 

Ben benim Kullanıcı modelinde, Sonra: İşte testtir

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :admin 

    has_many :ownerships 
    has_many :projects, :through => :ownerships 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

    validates :name, :presence => true, 
        :length => { :maximum => 50 } 

    validates :email, :presence => true, 
        :format => { :with => email_regex }, 
        :uniqueness => { :case_sensitive => false } 

    validates :admin, :presence => true 

end 

açıkça bir yönetici ayarıyla yeni bir kullanıcı yarattık, yine de buna yanlış olduğunu söylüyor? Yönetici ayarı için geçişi admin: boolean olarak oluşturdum. Ben yanlış bir şey mi yaptım? Garip

Failures: 

    1) User should create a new instance given valid attributes 
    Failure/Error: User.create!(@attr) 
    ActiveRecord::RecordInvalid: 
     Validation failed: Admin can't be blank 
    # ./spec/models/user_spec.rb:14:in `block (2 levels) in <top (required)>' 

, ben doğrular açıklama: yönetici,: Burada

hata var varlığı => true, testin doğru kullanıcıyı oluşturur ancak

"Kullanıcı bir yönetici ayarı gerektirir gerektiği" üzerinde başarısız

DÜZENLEME: @attr: admin değerini "t" olarak değiştirdiğimde çalışır! Değer yanlış olduğunda neden çalışmıyor? rails guides itibaren

+0

Gerçek hata yardımcı olacaktır. – bricker

+0

Hataları: 1) geçerli verilen yeni bir örneğini oluşturmak gerekir Kullanıcı Başarısızlık/Hata attributes: User.create (@ attr) ActiveRecord :: RecordInvalid: Doğrulama başarısız: Yönetici boş # ./spec olamaz /models/user_spec.rb:14:in <üstte (gerekli)> 'bloğunu (2 seviye) –

cevap

25

: true (alan mevcut değildir yani) ActiveRecord doğrulama önce false için "f" dönüştürmektedir gibi Temelde

Since false.blank? is true, if you want to validate the presence of a boolean field you should use validates :field_name, :inclusion => { :in => [true, false] }.

, görünüşe ve sonra false.blank? çalışır ve döner doğrulama işleminin başarısız olmasına neden olur. Yani, doğrulama değiştirmek, sizin durumunuzda düzeltmek için:

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

bana biraz hacky görünüyor ... umarım Raylar geliştiriciler gelecekteki bir sürümde bu yeniden gözden geçirecek.

İlgili konular