2014-06-05 7 views
5

मुझे यहां स्पष्ट रूप से याद आना चाहिए। मैं django 1.5.x का उपयोग कर रहा हूं और डीजेंगोस टेस्टकेस कक्षा के आधार पर unittests बना रहा हूँ। मेरे पास सेटिंग्स में परिभाषित डीबी का एक गुच्छा है क्योंकि मैं अलग-अलग स्रोतों से बहुत से खींच रहा हूं (केवल पढ़ने के लिए)। परीक्षण चलाते समय मैं केवल अपने डिफ़ॉल्ट डीबी का एक टेस्ट संस्करण बनाना चाहता हूं, बाकी मैं केवल पढ़ने के लिए ध्वजांकित करना चाहता हूं और test_db_name के रूप में पुनः बनाने की कोशिश नहीं करता (उपयोगकर्ता परिभाषित नहीं करेगा (इन नहीं) को इन्हें बनाने की अनुमति नहीं है वैसे भी डीबीएस)।Django unittest केवल पढ़ने के लिए परीक्षण डेटाबेस

निश्चित रूप से यह संभव है - जैसा कि मैंने कहा है कि मुझे स्पष्ट याद आना चाहिए?

किसी भी मदद के लिए आभारी।

मैथ्यू

उत्तर

1

स्पष्ट नहीं, नहीं। Sort-of documented, आप जबकि परीक्षण का उपयोग करने के डेटाबेस नाम निर्धारित कर सकते हैं:

settings.py

DATABASES = { 
    'default': { 
    'ENGINE': 'django.contrib.gis.db.backends.spatialite', 
    'NAME': 'db.sqlite3', 
    'TEST_NAME': '/tmp/test.sqlite3', 
    }, 
} 

आप तो निर्माण करने के लिए नहीं है (या पुनर्निर्माण) परीक्षण डेटाबेस चाहते हैं, आप डेटाबेस नकल करने की आवश्यकता होगी TEST_NAME और में नाम Django को रनों के बीच हटाने की कोशिश करने के बजाय, डेटाबेस को बरकरार रखने के लिए नए python manage.py test--keepdb कमांड का उपयोग करें। जून 2014 तक आपको इसे एक्सेस करने के लिए डीजेगो के विकास संस्करण में अपग्रेड करना होगा; आखिरकार यह स्थिर रिलीज में होगा। इसका नकारात्मक पक्ष यह है कि, जैसा कि मैं इसे समझता हूं, यह केवल आपके पढ़ने-योग्य वाले न केवल सभी डेटाबेस पर लागू होता है।

+1

धन्यवाद लेकिन मुझे लगता है कि हमने तारों को पार कर लिया है ?! मेरी समस्या यह नहीं है कि मैं बनाए गए किसी भी परीक्षण डेटाबेस के नाम को नियंत्रित करना चाहता हूं, यह है कि मैं डिफॉल्ट को छोड़कर टेस्ट वाले को बिल्कुल भी नहीं बनाना चाहता हूं। तो एक रिक्त डुप्लिकेट को कताई करने के बजाय मैं अपने परीक्षणों को परीक्षणों के लिए सेटिंग्स में सूचीबद्ध डीबी का उपयोग करना चाहता हूं क्योंकि यह केवल पढ़ा जाता है और रिकॉर्ड प्रदान करता है जो मुझे परीक्षणों में चाहिए। – Mathew

+0

@Mathew आप वहां से अधिकतर तरीके से प्राप्त करने में सक्षम हो सकते हैं, – Josh

+2

परिवर्तनों को देखें, हम में से कई लोगों के लिए समस्या यह है कि संपूर्ण होस्ट इन माध्यमिक डीबीएस में से केवल कुछ के लिए पढ़ा जाता है। एक अलग डीबी नाम निर्दिष्ट करने में मदद नहीं करता है। – shacker

0

मैं एक ही समस्या थी और इस तरह से इसे हल करने में कामयाब रहे:

settings.py

DATABASES = { 
    'default': {...}, 
    'other': {...} 
} 

DATABASE_ROUTERS = ['routers.MyRouter'] 

... 

TESTING = 'test' in sys.argv 

if TESTING: 
    DATABASE_ROUTERS = [] 
    DATABASES.pop('other')  

आप हार्ड कोडित db 'using' साथ के रूप में ऐसे मार्ग का उपयोग नहीं करते और केवल का उपयोग 'DATABASE_ROUTERS', तो यह समाधान आपके लिए पर्याप्त होना चाहिए।

बेशक, यदि आप वास्तव में रिमोट डीबी और वहां संग्रहीत डेटा के कनेक्शन का परीक्षण करना चाहते हैं तो यह जाने का तरीका नहीं होगा।

+2

यह तकनीक 'test_other' को बनाए जाने से रोकती है, लेकिन 'अन्य' में रहने वाले डेटा का उपयोग करने वाले विचारों के लिए परीक्षण विफल हो जाएगी (क्योंकि यह प्रभावी रूप से पूरे ऐप से चला गया है)। – shacker

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