2010-08-26 12 views
6

मैं अपने आवेदन का परीक्षण कर रहा हूं और मैं एक समस्या में भाग रहा हूं और मुझे यकीन नहीं है कि क्यों। मैं अपने परीक्षणों के लिए फिक्स्चर लोड कर रहा हूं और फिक्स्चर में विदेशी कुंजी हैं जो एक-दूसरे पर भरोसा करती हैं। उन्हें एक निश्चित क्रम में लोड किया जाना चाहिए या यह काम नहीं करेगा।क्या Django फिक्स्चर परीक्षण करते समय गलत क्रम में लोड करते हैं?

जुड़नार मैं लोड हो रहा है कर रहा हूँ कर रहे हैं:

["test_company_data", "test_rate_index", 'test_rate_description']

कंपनी डेटा पहले से एक है। test_rate_index की कंपनी के लिए एक विदेशी कुंजी है, और test_rate_description में test_rate_index में घोषित मॉडल के लिए एक विदेशी कुंजी है। (एक तरफ के रूप में, अलग-अलग परीक्षणों को अलग-अलग फिक्स्चर की आवश्यकता होती है, इसलिए मैं केवल एक में सबकुछ नहीं डाल रहा हूं)

यदि मैं परीक्षण लोड करने के लिए django की मानक प्रक्रिया का उपयोग करता हूं, तो परीक्षण उचित क्रम में लोड नहीं होते हैं।

 
class TestPackages(test.TestCase): 
    fixtures = ["test_company_data", "test_rate_index", "test_rate_description",] 

मैं संदेश मिलता है

DoesNotExist: RateDescription matching query does not exist.

लेकिन अगर मैं अपने जुड़नार के क्रम को उल्टा (जो कोई मतलब नहीं है) यह काम करता है:

fixtures = ["test_rate_description", "test_company_data", "test_rate_index",]

Django's documentation कहा गया है कि जुड़नार क्रम में लोड उन्हें घोषित किया जाता है, लेकिन ऐसा लगता है कि यह मामला नहीं है।

समाधान के लिए, उपयोग करने के बजाए Django के

 call_command('loaddata', *fixtures, **{ 
              'verbosity': 0, 
              'commit': False, 
              'database': 'default' 
             })

मैं सेटअप विधि है कि एक समय में जुड़नार लोड करता है एक में एक अलग समारोह का उपयोग कर रहा हूँ।

def load_fixtures(fixtures): 
    for fixture in fixtures: 
     call_command('loaddata', fixture, **{ 
              'verbosity': 0, 
              'commit': False, 
              'database': 'default' 
              })

वहाँ कुछ मैं गलत तरीके से कर रहा हूँ या समझ नहीं है कि मेरे जुड़नार खड़ी कर रहा है उचित क्रम में लोड करने के लिए नहीं है जब मानक विधि का उपयोग करने की कोशिश कर रहा है?

+0

क्या आप पोस्ट कर सकते हैं कि आपके फिक्स्चर के मॉडल कैसा दिखते हैं? –

उत्तर

1

डीजेगो के दस्तावेज़ीकरण में कहा गया है कि फिक्स्चर उनके आदेश में लोड होने पर लोड होता है, लेकिन ऐसा नहीं लगता है।

यह निश्चित रूप से अजीब है। फिक्स्चर उचित क्रम में लोड हो रहे हैं जब मैंने अपनी परियोजनाओं में से एक का परीक्षण किया (Django 1.2.1, पायथन 2.6.2, पोस्टग्रेस्क्ल 8.3.11)।

यहां समस्या निवारण के लिए मैं क्या करूँगा।

DoNotExist: दर डिस्क्रिप्शन मिलान क्वेरी मौजूद नहीं है।

  1. आप जब एक दृढ़ लोड हो रहा है या जब एक परीक्षण को क्रियान्वित इस त्रुटि हो रही है? क्या आप इसे बढ़ा रहे स्थिरता/कोड पा सकते हैं? यदि आवश्यकता हो तो verbosity बढ़ाएं।

  2. क्या आप कमांड लाइन से loaddata कमांड को फायर करने का प्रयास कर सकते हैं? उचित कॉल अनुक्रम में प्रत्येक कॉल के लिए एक स्थिरता के नाम को पारित करने के लिए इसे तीन बार कॉल करें। और देखें कि फिक्स्चर लोड हो गए हैं या नहीं।

  3. मुझे पता है कि आपने शायद यह पहले से ही किया होगा, लेकिन क्या आप यह सुनिश्चित कर सकते हैं कि पहले और दूसरे फिक्स्चर में RateDescription डेटा नहीं है?

+2

हाय मनोज, आपके डिबगिंग सुझावों के लिए धन्यवाद। जब मैं कमांड लाइन से भाग गया, मैं, यह पता चला कि जुड़नार क्योंकि "CREATION_TIME" शून्य नहीं हो सकता बमबारी कर रहे थे "। जुड़नार वे के रूप में मैं उम्मीद होती है चलाने के लिए लग रहे करने के लिए CREATION_TIME जोड़ने के बाद। हालांकि अभी भी मुझे कोई समझ नहीं आता है कि वे एक आदेश में ठीक से इंस्टॉल क्यों करेंगे, लेकिन दूसरा नहीं। मेरे सभी परीक्षण पास हुए और परीक्षण उस डेटा पर निर्भर हैं। – Aaron

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