2012-10-27 13 views
5

साथ इस Learn Rails by example book से आता है:परीक्षण अमान्य ईमेल Rspec

describe "when email format is invalid" do 
    it "should be invalid" do 
     addresses = %w[[email protected],com user_at_foo.org [email protected] 
        [email protected]_baz.com [email protected]+baz.com] 
     addresses.each do |invalid_address| 
     @user.email = invalid_address 
     @user.should_not be_valid 
     end  
    end 

मैं Rspec में अभी शुरुआत कर रहा हूँ।

describe "when email is not present" do 
    before { @user.email = " " } 
    it { should_not be_valid } 
    end 

तो मैं सोच रहा था क्यों लेखक इस तरह उपरोक्त कोड नहीं लिखा था: इससे पहले, वहाँ इस तरह एक कोड था

describe "when email format is invalid" do 
    before do 
     addresses = %w[[email protected],com user_at_foo.org [email protected] 
        [email protected]_baz.com [email protected]+baz.com] 
     @user.email = invalid_address 
     addresses.each do |invalid_address| 
     @user.email = invalid_address 
     end 
    end 

    it { should_not be_valid }   
end 

ठीक है, हो सकता है इस कोड गलत है। लेकिन मूल रूप से, मैं पूछ रहा हूं कि लेखक ने it से पहले before का उपयोग क्यों नहीं किया है या it से पहले address चर डाला है?

संपादित करें (जैसा कि उन्होंने पिछले उदाहरण में किया था):

उन्होंने यह भी एक अन्य उदाहरण में कुछ ऐसा ही:

describe "when email address is already taken" do 
    before do 
     user_with_same_email = @user.dup 
     user_with_same_email.email = @user.email.upcase 
     user_with_same_email.save 
    end 

    it { should_not be_valid } 
    end 

उत्तर

7

जवाब क्या before ब्लॉक वास्तव में क्या कर रहा है में निहित है। इन परीक्षणों में, it चलाने से पहले इसे पूरी तरह से चलाया जा रहा है।

तो, कोड के पहले ब्लॉक चलाया जाता है (और लिखा जा सकता है) के रूप में:

@user.email = '[email protected],com' 
@user.should_not be_valid 
@user.email = 'user_at_foo.org' 
@user.should_not be_valid 
@user.email = '[email protected]' 
@user.should_not be_valid 
@user.email = '[email protected]_baz.com' 
@user.should_not be_valid 
@user.email = '[email protected]+baz.com' 
@user.should_not be_valid 

और कोड के दूसरे खंड में चलाया जाता है (और लिखा जा सकता है) के रूप में:

@user.email = ' ' 
@user.should_not be_valid 

लेकिन तीसरे ब्लॉक होगा पूरे सरणी से पहले ही है, जिसके परिणामस्वरूप it के लिए हो रही, के माध्यम से लूप:

@user.email = '[email protected]+baz.com' 
@user.should_not be_valid 

अंतिम उदाहरण में, वह उसी वस्तु के खिलाफ संचालन की श्रृंखला कर रहा है, जिसका मूल्यांकन it से पहले किया जाता है, जिसे केवल समझने के लिए एक बार चलाने की आवश्यकता होती है।

उम्मीद है कि यह मदद करता है, शुभकामनाएँ!

+0

बहुत बहुत धन्यवाद! अब यह सब स्पष्ट है। – alexchenco

+0

ठीक है, आपका स्वागत है! –