Django

2012-01-10 16 views
6

में दक्षिण माइग्रेशन का परीक्षण करना क्या कोई इसे लिखने के बाद माइग्रेशन स्वयं का परीक्षण करने का तरीका जानता है? मेरी DataMigrations में बहुत कई बार मैं True बजाय डिफ़ॉल्ट मान, गलत denormalizations के लिए False की तरह बेवकूफ सूक्ष्म कीड़े मिल गया है, आदिDjango

डिफ़ॉल्ट, दक्षिण सम्मेलन की संख्या के साथ माइग्रेशन शुरू करने के लिए है, तो आप नहीं कर सकते __import__ का उपयोग किये बिना उन्हें आयात भी करें। क्या कोई भी इसी तरह की समस्या पर आया है? लोग उन्हें कैसे हल करते हैं?

सबसे स्पष्ट दृष्टिकोण एक अलग आयातित मॉड्यूल में माइग्रेशन तर्क को पकड़ना होगा और परीक्षण करना होगा, लेकिन यह कुछ हद तक गुस्से में है।

+0

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

+0

@ माइकल: यह योजनाबद्धता के लिए ठीक है, लेकिन इसे डेटामैग्रेशन में एक बग नहीं मिलेगा। – jammon

+0

उस स्थिति में, आप माइग्रेशन परीक्षण के लिए डेटाबेस बना सकते हैं, नमूना डेटा के साथ पॉप्युलेट कर सकते हैं, माइग्रेशन चला सकते हैं, और अंतिम मानों का परीक्षण कर सकते हैं। –

उत्तर

2

मैं एक ही समस्या में ठोकर खाई।

from django.conf import settings 

class MyModel(models.Model): 
    stupid_error = models.BooleanField(default=False) 

    def __init__(self, *args, **kwargs): 
     super(MyModel, self).__init__(*args, **kwargs) 
     if settings.DEBUG: 
      assert not self.stupid_error 

ठीक है, यह थोड़ा भद्दा है: जब से मैं datamigrations के लिए परीक्षण करने के लिए एक रास्ता नहीं मिला, मैं भ्रष्ट डेटा का पता लगाने के दावे का इस्तेमाल किया। लेकिन ऐसा लगता है कि काम करता है।

[संपादित करें] इसके बारे में फिर से सोचने के बाद, मुझे एक बेहतर समाधान मिला: परीक्षणों को डेटा माइग्रेशन में ही डालें। चूंकि माइग्रेशन एक-ऑफ कोड है, इसलिए इसे परीक्षण और परीक्षण नहीं करना पड़ता है।

class Migration(DataMigration): 
    def forwards(self, orm): 
     # lots of awesome migration code here 
     # ... 
     for m in orm.MyModel.objects.all(): 
      assert not m.stupid_error 
+0

पता नहीं, आप उन चीजों को मिला रहे हैं जो एक साथ नहीं होनी चाहिए, परीक्षण एक चीज हैं और माइग्रेशन एक और हैं .... – Arruda

0

मैं दक्षिण में काफी नया हूं, लेकिन मैंने इसे इस्तेमाल करने के कुछ बार, मैंने यूनिट परीक्षणों का भी उपयोग किया और फिर,। manage.py test माइग्रेशन को भी निष्पादित किया गया, इससे पहले से ही कई कीड़े मिल जाएंगी।

हालांकि, यह संभवतः सभी मामलों में काम नहीं करता है (मुझे लगता है कि इन माइग्रेशन निष्पादित होने पर परीक्षण डेटाबेस में कोई डेटा नहीं है)।