2009-12-10 8 views
10

हर कोई जानता है कि स्वचालित परीक्षण एक अच्छी बात है।क्या देशी सत्यापन रेल में परीक्षण किया जाना चाहिए?

सभी को पता नहीं है कि परीक्षण करने के लिए बिल्कुल क्या नहीं है।

मेरा प्रश्न यह है कि अगर वैध सत्यापन जैसे validate_presence_of, validate_uniqueness_of और इतने पर आवेदन में परीक्षण किया जाना चाहिए।

मेरे कार्यालय में हम तीन हैं, एक सोचता है कि इसका परीक्षण किया जाना चाहिए, कोई सोचता है कि यह नहीं होना चाहिए और मैं हवा में हूं।

उत्तर

18

हां।

परीक्षण करना कि एक मॉडल विशेषता मौजूद है या नहीं, केवल वास्तविक परीक्षण के उप-उत्पाद के रूप में validates_presence_of कोड का परीक्षण कर रहा है, जो कि आपके मॉडल के भीतर validates_presence_of मौजूद है।

अगर किसी ने सत्यापन कोड का एक समूह टिप्पणी की है और फिर इसे अपूर्ण करने के लिए भूल गए हैं तो यह ज्ञात नहीं होगा और सभी प्रकार की समस्याओं का कारण बन सकता है।

मैं उनका परीक्षण करता हूं, क्योंकि मुझे नहीं लगता कि वे काम नहीं करते हैं लेकिन यह सुनिश्चित करने के लिए कि जब आवश्यक हो तो वे मेरे मॉडल में मौजूद हैं।

+1

> मैं उनका परीक्षण करता हूं, क्योंकि मुझे नहीं लगता कि वे काम नहीं करते हैं, लेकिन यह सुनिश्चित करने के लिए कि –

3

क्या आप प्रत्येक एकल रूबी ऑपरेटर और एपीआई विधि के लिए यूनिट परीक्षण लिखने की योजना बना रहे हैं?

आपके यूनिट परीक्षणों को अपने कोड का परीक्षण करना चाहिए, अन्य लोगों के नहीं - यह उनकी नौकरी है, क्यों उनके काम को डुप्लिकेट करें? और यदि आप उनका काम अच्छी तरह से करने के लिए भरोसा नहीं करते हैं, तो आप उनका कोड क्यों उपयोग कर रहे हैं?

+1

यूनिट परीक्षणों में दो (मुख्य) लक्ष्य होते हैं। एक यह सुनिश्चित कर रहा है कि कार्यान्वयन ध्वनि है, लेकिन दूसरा और महत्वपूर्ण है: क्रियान्वयन में बदलाव होने पर व्यवहार को बदलना नहीं होगा। – beauby

1

आपके द्वारा लिखे गए कोड का परीक्षण करें। ActiveRecord में सत्यापन कक्षा विधियों के लिए कवरेज सहित बेहतरीन परीक्षण कवरेज है।

युक्ति:

require 'spec_helper' 

describe User do 
    before(:each) do 
    @user = User.new 
    end 

    it "should not be valid without an email" do 
    @user.save.should be_false 
    @user.should_not be_valid 
    @user.email = "[email protected]" 
    @user.should be_valid 
    @user.save.should be_true 
    end 

end 

कि कल्पना आप

class User < ActiveRecord::Base 
    validates_presence_of :email 
end 
+0

आवश्यक होने पर वे मेरे मॉडल में मौजूद हैं, आप वास्तव में इसे सक्रिय कर रहे हैं और ActiveRecord का परीक्षण कर रहे हैं। यदि उपयोगकर्ता मान्य नहीं है तो सहेजें हमेशा गलत होगा। मैं यूनिट टेस्ट में रिकॉर्ड की बचत का भी परीक्षण नहीं करता (कुछ अपवादों के साथ विशिष्टता और एसोसिएशन 2 होने के कारण मैं कभी-कभी डीबी को लिख सकता हूं) –

+0

मैं आपका पॉइंट देखता हूं। मैं उपर्युक्त उम्मीद में सहमत हूं, कई लोग कहेंगे कि रिकॉर्ड सहेजा नहीं गया था अनावश्यक है। अन्य असहमत होंगे। विचार व्यवहार का परीक्षण करना है। कभी-कभी आपको रिटर्न को गलत बचाने की जांच करने की आवश्यकता होती है, उदा। अगर आपके पास पहले से हैं जैसे कोड: process_credit_card,: if =>: card_attributes_updated? यदि आधार पर भुगतान गेटवे एक अमान्य repsonse देता है, तो मान्य करने के लिए एक त्रुटि जोड़ सकते हैं? यह सच होगा भले ही रिकॉर्ड –

4

मैथ्यू बास एक महान मणि वह सिर्फ बात के इस प्रकार के लिए जारी है है की आवश्यकता होगी पारित करने के लिए प्राप्त करने के लिए। यह rspec matchers जोड़ता है जो यह सुनिश्चित करने के लिए जांच करता है कि सत्यापन वास्तव में अंतर्निहित ActiveRecord कोड को चलाने के बिना है। Read more about it here

यह सत्यापन के लिए matchers जोड़ता है:

it_should_belong_to :employer 
it_should_have_many :friends, :romans, :countrymen 
it_should_have_one :account 
it_should_have_and_belong_to_many :comments 

और कुछ अन्य उपयोगी अतिरिक्त:

# tests that User.count increases by 1 
it_should_be_createable :with => {:first_name => 'Ed', :last_name => 'The Duck', :email => '[email protected]'} 

# tests that the attribute is protected 
it_should_protect :email 

किसी भी एक संपूर्ण नहीं है इसका मतलब है कि द्वारा

it_should_validate_presence_of  :first_name, :last_name, :email 
it_should_validate_numericality_of :zip 
it_should_validate_uniqueness_of :email 
it_should_validate_inclusion_of :gender, :in => %w(Male Female) 

इसके अलावा संघों के लिए matchers सूची। मुझे एक कांटा मिला है जहां मैंने कुछ अन्य लोगों को जोड़ा है, शायद अन्य लोग भी चारों ओर तैर रहे हैं। यह एक अच्छा दृष्टिकोण है और मेरे लिए यह सुनिश्चित करने के लिए कि मध्यस्थता अभी भी मॉडल में थी, और यह सुनिश्चित करने के लिए ActiveRecord कोड निष्पादित करने के लिए परीक्षणों को स्पष्ट रूप से लिखना है।

+0

+1 नहीं हो सकता है, यह वास्तव में बहुत अच्छा लग रहा है। –

+0

यह एक अच्छा सुझाव है। उसने कंधे को देखा था, जो इसे बहुत आसान बनाता है, लेकिन आरएसपीईसी का उपयोग करें (क्योंकि मुझे बाकी सभी के लिए यह बेहतर पसंद है :), और मुझे वास्तव में ऐसा कुछ याद आया। – nathanvda

3

यह वह जगह है जहां Shoulda जैसे टूल वास्तव में काम में आते हैं। मुझे लगता है कि परीक्षण करने के लिए यह पूरी तरह से आपके ऊपर है आप लोगों को प्रदान करने वाले टूल के साथ कोड लिखते हैं।सिर्फ इसलिए कि आप has_many का उपयोग कर रहे हैं, इसका मतलब यह नहीं है कि आप इसका उपयोग कर रहे हैं!

गंभीरता से, यदि आप मिश्रण में कंधे को एकीकृत करते हैं, तो यह इस तरह की चीजों का परीक्षण करने के लिए तुच्छ हो जाता है। यदि आप आरसीओवी चलाते हैं, तो यह आपको बताने जा रहा है कि आपके द्वारा लिखे गए सभी कोड पूरी तरह से परीक्षण नहीं किए जाते हैं, जब तक आप ऐसा नहीं करते।

संबंधित मुद्दे