मैंने रेल में टीडीडी के साथ अपनी यात्रा शुरू कर दी है और मॉडल सत्यापन के परीक्षणों के संबंध में एक छोटी सी समस्या में भाग लिया है जिसे मुझे समाधान नहीं मिल रहा है। के मैं एक उपयोगकर्ता मॉडल है मान लीजिए,रेल 3.1, आरएसपीसी: परीक्षण मॉडल सत्यापन
class User < ActiveRecord::Base
validates :username, :presence => true
end
और एक साधारण परीक्षण
it "should require a username" do
User.new(:username => "").should_not be_valid
end
यह सही ढंग से उपस्थिति मान्यता का परीक्षण करती है, लेकिन मैं अधिक विशिष्ट क्या चाहते हैं? उदाहरण के लिए, त्रुटियों पर परीक्षण full_messages आपत्ति ..
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
प्रारंभिक प्रयास (should_not be_valid का प्रयोग करके) के बारे में मेरी चिंता का विषय है कि RSpec एक वर्णनात्मक त्रुटि संदेश का उत्पादन नहीं होगा। यह बस कहता है "झूठी वापसी के लिए वैध उम्मीद है, सच हो गया।" हालांकि, दूसरे परीक्षण उदाहरण में मामूली कमी है: यह त्रुटियों की वस्तु को प्राप्त करने के लिए नई विधि के बजाय बनाने विधि का उपयोग करता है।
मैं चाहता हूं कि मेरे परीक्षण परीक्षण के बारे में अधिक विशिष्ट हों, लेकिन साथ ही डेटाबेस को स्पर्श करने की आवश्यकता नहीं है।
किसी के पास कोई इनपुट है?
धन्यवाद मैथ्यू। क्या त्रुटि का करीब आने का कोई तरीका है जिसे मैं परीक्षण करने की कोशिश कर रहा हूं? X.should_not be_valid मेरे लिए इतना सामान्य प्रतीत होता है, और कौन जानता है कि सड़क के नीचे कुछ और रिकॉर्ड अवैध हो जाएगा। यह परीक्षण गलत जगह पर असफल हो जाएगा। वैसे, मुझे लगता है कि मैंने आपका जवाब स्वीकार कर लिया है। क्या मैं नहीं – Feech
ठीक है, इसलिए यही कारण है कि मैं कारखानों के लिए बहस करता हूं। आप वैध उपयोगकर्ता को एक ही स्थान पर एक बार उत्पादित करने के लिए कोड लिखते हैं और फिर आप यह सुनिश्चित करने के लिए एक परीक्षण लिखते हैं कि यह सभी व्यक्तिगत परीक्षणों से पहले मान्य है जो सुनिश्चित करते हैं कि आप इसे अमान्य कर सकते हैं। इस तरह यदि किसी कारण से आप अपना मॉडल बदलते हैं तो कारखाना लंबे समय तक वैध उपयोगकर्ता को 'फैक्ट्री.बिल्ड (: उपयोगकर्ता) बनाता है। Should be_valid' परीक्षण विफल हो जाएगा और आपको पता चलेगा कि आपको अपने कारखाने को अपडेट करना होगा ... इसे प्राप्त करें ? (और हाँ आपने मेरा 7 उत्तर स्वीकार किया) – Matthew
बिल्कुल सही स्पष्टीकरण। एक बार फिर धन्यवाद। – Feech