2012-03-12 15 views
6

मुझे लगता है कि अद्वितीय है एक ई-मेल के साथ एक उपयोगकर्ता वर्ग है, लेकिन किरायेदार के दायरे वाला का उपयोग कर:एक रेल परियोजना में एक दायरे में परीक्षण विशिष्टता चाहिये (लेकिन rspec नहीं)

class User < ActiveRecord::Base 
    validates :email, :uniqueness => {:scope => :tenant_id, :allow_blank => true} 
    #... 
end 

मैं इसे परीक्षण करने के लिए कोशिश कर रहा हूँ साथ:

class UserTest < ActiveSupport::TestCase 
    context "a user" do 
    setup { @user = create :user } 
    subject { @user } 

    should validate_uniqueness_of(:email).scoped_to(:tenant_id) 
    end 
end 

लेकिन परीक्षण इस संदेश के साथ विफल रहता है:

उम्मीद त्रुटियों में शामिल करने के लिए "पहले से ही लिया गया है" जब ईमेल के लिए सेट है "[email protected] xample.com ", त्रुटियां मिलीं: [" ईमेल पहले ही लिया जा चुका है (\ "[email protected] \") "," first_name खाली नहीं हो सकता है (शून्य) "," last_name खाली नहीं हो सकता है (शून्य) "] (किरायेदार_आईडी के विभिन्न मूल्य के साथ)

जो कई प्रश्न उठाता है। त्रुटि संदेश क्यों मेल नहीं खाता है? ऐसा लगता है क्योंकि वास्तविक ईमेल पता त्रुटि संदेश में शामिल है, लेकिन इसमें क्यों शामिल है? जब मैं यूआई से त्रुटि उत्पन्न यह शामिल किया जाना प्रतीत नहीं होता:

enter image description here

इसके अलावा, अंत में यह कहना है कि यह एक अलग किरायेदार, के साथ यह कोशिश कर रहा है जो अगर यह सच था, यह shouldn कोई त्रुटि उत्पन्न नहीं करता है (यह तब नहीं होता जब मैं ऐप चलाता हूं), लेकिन, यह त्रुटि की अपेक्षा क्यों कर रहा है? यह केवल त्रुटि की उम्मीद करनी चाहिए यदि यह वही किरायेदार_आईडी है।

यह इतना भ्रमित है। कोई विचार क्या हो रहा है और/या इसका सही तरीके से परीक्षण कैसे किया जाए?

उत्तर

15

बस इसी समस्या में भाग गया। हम

should validate_uniqueness_of(:email_id).scoped_to(:tenant_id) 

को

should validate_uniqueness_of(:email).scoped_to(:tenant_id) 

बदलकर इसे सुलझाने के लिए करता है, तो यह वास्तव में एक ही स्थिति है पता नहीं है में सक्षम थे, लेकिन जाहिरा तौर पर हमारे मुद्दा नेस्ट संसाधनों एक पाश के लिए मेल खाने वाला फेंक किसी भी तरह के कारण हुई थी ।

0

मुझे लगता है कि scoped_to में कुछ परीक्षणों के साथ अस्पष्ट समस्याएं हैं। जब भी सामना करना पड़ता है, तो अधिक वर्बोज परीक्षण लिखना और एक ही दायरे में ऑब्जेक्ट बनाने में विफलता का परीक्षण करना आवश्यक हो जाता है।