आप expect ... change
का उपयोग करेंगे कि एक विशेष विधि कॉल परिवर्तन सत्यापित करने के लिए - या नहीं बदलता है - कुछ अन्य मूल्य। इस मामले में:
expect { click_button "Create my account" }.not_to change(User, :count)
निम्न करने के लिए rspec कारण होगा:
- भागो
User.count
और दिए गए मान को नोट करें। (यह एक रिसीवर और एक विधि नाम के रूप में, (User, :count)
की तरह अपने उदाहरण में,, { User.count }
की तरह निर्दिष्ट किया जा सकता या कोड का एक मनमाना ब्लॉक के रूप में।
- भागो
click_button "Create my account"
जो एक Capybara विधि है कि एक लिंक पर एक माउस क्लिक simulates है। ।।
- भागो
User.count
फिर
- # 1 और # 3 की परिणामों की तुलना करें अगर वे भिन्न होते हैं, उदाहरण के विफल रहता है कि वे एक ही कर रहे हैं, यह गुजरता
अन्य तरीके expect ... change
उपयोग करने के लिए:।।
expect { thing.destroy }.to change(Thing, :count).from(1).to(0)
expect { thing.tax = 5 }.to change { thing.total_price }.by(5)
expect { thing.save! }.to raise_error
expect { thing.symbolize_name }.to change { thing.name }.from(String).to(Symbol)
कुछ दस्तावेज़ here हैं।
यह थोड़ा सा आर्केन कैसे करता है, और इसे समझने के लिए यह आवश्यक नहीं है कि यह इसका उपयोग करने के लिए कैसे काम करता है। expect
पर कॉल आरएसपीईसी के स्वयं के कस्टम डीएसएल और "मैचर्स" की प्रणाली का उपयोग करके निष्पादित करने के लिए आरएसपीईसी के लिए एक संरचना को परिभाषित कर रहा है। गैरी बर्नार्ड के पास screencast है, जिसमें उनका तर्क है कि आरएसपीईसी का रहस्य वास्तव में एक गतिशील भाषा जैसे रूबी से स्वाभाविक रूप से बाहर निकलता है।यह rspec का उपयोग कर एक अच्छा परिचय नहीं है, लेकिन यदि आप उत्सुक हैं कि यह सब कैसे काम करता है, तो आपको यह दिलचस्प लगेगा।
अद्यतन
एक और जवाब पर अपनी टिप्पणी देखने के बाद, मैं आपरेशन के आदेश के बारे में थोड़ा जोड़ देंगे। अनजान चाल यह है कि यह matcher (change
इस मामले में) है जो सभी ब्लॉक निष्पादित करता है। expect
में लैम्ब्डा है, not_to
should_not
के लिए उपनाम है जिसका काम लैम्ब्डा को मैचर पर पास करना है। इस मामले में matcher change
है जो एक बार अपने तर्क को निष्पादित करने के बारे में जानता है, फिर इसे पारित किया गया लैम्ब्डा निष्पादित करें (expect
से एक), फिर चीजों को बदलने के लिए फिर से अपना तर्क चलाएं। यह मुश्किल है क्योंकि रेखा दिखती है कि इसे बाएं से दाएं निष्पादित करना चाहिए, लेकिन चूंकि अधिकांश टुकड़े सिर्फ कोड के ब्लॉक के चारों ओर गुजर रहे हैं, इसलिए वे उन्हें किसी भी क्रम में मफल करने के लिए सबसे अधिक समझ में डाल सकते हैं।
मैं rspec internals पर एक विशेषज्ञ नहीं हूं, लेकिन यह मूल विचार की मेरी समझ है।
स्रोत
2012-05-18 01:55:41
यह कैपिबरा नहीं है, यह आरएसपीईसी है। –
@RyanBigg धन्यवाद, बस इसे ठीक किया। अच्छे उदाहरणों के लिए – Bedasso