2011-10-15 1 views
10

मैंने अभी परीक्षण के लिए एक परीक्षण लिखा है यदि कोई नया उपयोगकर्ता निर्माण में व्यवस्थापक सेटिंग भी शामिल है।रुपेक सत्यापन विफल - विशेषता खाली नहीं हो सकती है लेकिन यह खाली नहीं है

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 

फिर, मेरे उपयोगकर्ता मॉडल में मेरे पास है:: यहाँ परीक्षा है

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 

मैं स्पष्ट रूप से एक व्यवस्थापक सेटिंग के साथ एक नया उपयोगकर्ता बना, तो क्यों यह कह रहा है यह बात गलत है? मैंने व्यवस्थापक सेटिंग के लिए माइग्रेशन व्यवस्थापक के रूप में बनाया: बूलियन। क्या मैंने कुछ गलत किया?

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)>' 

अजीब तरह से पर्याप्त है, जब मैं पुष्टि बाहर टिप्पणी: व्यवस्थापक,:

यहाँ त्रुटि है उपस्थिति => true, परीक्षण सही ढंग से उपयोगकर्ता बनाता है लेकिन

पर "उपयोगकर्ता एक व्यवस्थापक सेटिंग से किया जा सकेगा" विफल रहता है

संपादित करें: जब मैं @attr बदलता हूं: व्यवस्थापक मान "टी" में काम करता है! मूल्य गलत होने पर यह क्यों काम नहीं करता है?

+0

वास्तविक त्रुटि मदद करेगा। – bricker

+0

विफलताएं: 1) उपयोगकर्ता वैध दिया एक नया उदाहरण बनाना चाहिए जिम्मेदार बताते हैं विफलता/त्रुटि: User.create (@ attr) ActiveRecord :: RecordInvalid: सत्यापन विफल: व्यवस्थापक खाली # ./spec नहीं किया जा सकता /models/user_spec.rb:14: <ब्लॉक (2 स्तर) में <शीर्ष (आवश्यक)> ' –

उत्तर

25

rails guides से:

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] }.

असल में, ऐसा लगता है कि ActiveRecord सत्यापन से पहले false करने के लिए अपने "f" परिवर्तित किया जाता है, और फिर इसे false.blank? चलाता है और रिटर्न true (जिसका अर्थ है कि क्षेत्र मौजूद नहीं है) , सत्यापन विफल होने का कारण बनता है। तो, आपके मामले में यह तय करने के लिए, अपनी मान्यता को बदलने:

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

एक छोटे से मेरे लिए hacky लगता है ... उम्मीद है कि रेल डेवलपर्स एक भविष्य के रिलीज में इस पुनर्विचार करेंगे।