2012-10-28 12 views
8

के साथ पासवर्ड की लंबाई सत्यापन का परीक्षण करना मैं यह सुनिश्चित करने के लिए कुछ यूनिट परीक्षण लिख रहा हूं कि उपयोगकर्ता मॉडल में पासवर्ड < 8 वर्ण लंबा नहीं हो सकता है।आरएसपीसी

class User < ActiveRecord::Base 
    ... 
    validates :password, :length =>{ 
    :minimum => 90, 
    :too_short => "password is too short, must be at least %{count} characters" 
    }, :on => :create 

end 

और एक user_spec.rb परीक्षण:

मैं एक उपयोगकर्ता मॉडल के साथ शुरू कर दिया

describe User do 
    subject { FactoryGirl.build :user } 

its(:password) { should have_at_least(8).items } 
end 

हालांकि मैंने महसूस किया कि यह वास्तव में मेरे सत्यापन परीक्षण नहीं होता है, यह सिर्फ परीक्षण है कि मेरे कारखाने में एक पासवर्ड था = = 8 अक्षर।

क्या वैध परीक्षण के अलावा ऐसा करने का कोई अच्छा तरीका है? 0-7 वर्ण पासवर्ड के लिए विधि?

मेरा सिद्धांत यह है कि यदि मैं केवल 7 अक्षरों के लिए परीक्षण करता हूं और कोई गलती से हार्ड कोड है कि 4 वर्ण पासवर्ड ठीक हैं तो यह सत्यापन पास होगा लेकिन वास्तव में इसका इरादा नहीं था। कुछ कोड हो सकता है जहां यह 8 अक्षरों से अधिक होने वाले पासवर्ड पर निर्भर करता है (संभव नहीं है लेकिन अन्य स्थितियों में सत्य हो सकता है) और इसलिए 4 का पासवर्ड गलत है।

इस मामले में मॉडल में पासवर्ड सत्यापन बदलने वाले व्यक्ति को यह नहीं पता होगा कि उन्होंने कुछ भी गलत किया है।

मैं सिर्फ यह जानना चाहता हूं कि टीडीडी के साथ इस तरह की परिस्थितियों का सही ढंग से परीक्षण कैसे करें।

+0

मैं आपकी समस्या को समझ में नहीं आता .. – apneadiving

उत्तर

16

thoughtbot के shoulda matchers में ensure_length_of मिलान का उपयोग करना, आप यह कर सकते हैं:

describe User do 
    it { should validate_length_of(:password).is_at_least(8) 
             .with_message(/password is too short/) } 
end 

यह भी देखें: How can I test :inclusion validation in Rails using RSpec

+1

'sure_length_of' अब बहिष्कृत है। इसके बजाय 'validate_length_of' का उपयोग करें। –

2

अगर यह आपके सवाल का जवाब है, लेकिन मुझे लगता है कि आप कुछ इस तरह से सुरक्षित हैं मैं नहीं जानता:

class User < ActiveRecord::Base 
    validates :password, :length => {:minimum => 8 } 
end 

describe User do 
    it "validates password length" do 
    FactoryGirl.build(:user, password: "1234567").should_not be_valid 
    FactoryGirl.build(:user, password: "12345678").should be_valid 
    end 
end 

कारण करने के लिए होगा इस परीक्षण के लिए एक 4 वर्ण के पासवर्ड किसी के माध्यम से जाने के लिए वह यह है कि एक सत्यापन नियम निर्धारित किया है जो कहता है कि 4 वर्ण ठीक हैं, 7 ठीक नहीं है, लेकिन 8 ठीक है। कुछ ऐसा नहीं है जो दुर्घटना से होने की संभावना है।

+0

यह प्रभावी रूप से क्या हम पहले से ही है। "कुछ भी संभावना नहीं है" का अर्थ यह अभी भी संभव है और यह जानने के लिए कि क्या बचाना है, काम करने की कोशिश कर रहे थे। हालांकि धन्यवाद! –