2010-11-09 10 views
5

पृष्ठभूमि के लिए मिडलवेयर के साथ django पेजों का परीक्षण करना पृष्ठभूमि: मैं अपने एकल django ऐप को अलग-अलग होस्टनामों का जवाब देने के लिए मिडलवेयर django-multihost (http://effbot.org/zone/django-multihost.htm) का उपयोग कर रहा हूं। परियोजना। Host: HTTP अनुरोध शीर्षलेख के आधार पर मिडलवेयर ROOT_URLCONF (यानी urls.py फ़ाइल) को बदलता है।मल्टीहोस्ट

यह बहुत अच्छा काम करता है, लेकिन मैं कुछ सरल एकीकरण परीक्षण लिखना चाहता हूं जो जांचता है कि पृष्ठ ठीक से लोड हो रहे हैं। यहाँ एक बुनियादी परीक्षण है कि जाँच करता है, इसका एक उदाहरण है, तो /trends पृष्ठ लोड और यह पाठ "आज के लिए रुझान" इस पर है कि:

def test_homepage_loads(self): 
    client = Client() 
    client.login(username = 'testing', password = 'testing') 
    page = client.get("/trends", follow = follow_redirects) 
    self.assertEquals(page.status_code, 200) 
    self.assertTrue(page.content.find('Trends for Today') > 0) 

समस्या है, यह हमेशा के बजाय डिफ़ॉल्ट ROOT_URLCONF का उपयोग कर लोड हो जाता है मिडलवेयर का आह्वान होगा। इससे कोई फर्क नहीं पड़ता कि मैंने मेजबाननाम को यूआरएल में स्पष्ट रूप से client.get("http://secondarysite/trends") में रखा है।

मैं django परीक्षण क्लाइंट के साथ अन्य वर्चुअल साइटों पर कैसे परीक्षण कर सकता हूं? मैं परीक्षण में मिडलवेयर का आह्वान करना चाहता हूं ताकि मैं उस तर्क का परीक्षण कर सकूं। लेकिन अगर मुझे परीक्षण की अवधि के लिए ROOT_URLCONF सेट करने की तरह कुछ हैकी करना है, लेकिन मुझे यकीन नहीं है कि यह कैसे करें।

उत्तर

11

Django ग्राहक आप इस तरह HTTP हेडर सेट कर सकते हैं का उपयोग करना:

client.get(url, HTTP_HOST = 'my.host.com') 

मूल रूप से get कार्यों तर्क है, जो यह HTTP हेडर के रूप में इस्तेमाल करेगा की एक dict ले।

self.request_headers = { 'HTTP_HOST': 'foo' } 

और अपने परीक्षा पद्धति में:: सूखे का पालन करने के लिए, आप unittest वर्ग के setup() में कुछ इस तरह कर सकता है

client.get(url, **self.request_headers) 

नोट: मुझे यकीन है कि अगर यह काम करेगा नहीं कर रहा हूँ तुम्हारी समस्या। हालांकि यह एकमात्र तरीका है जिसे मैं हेडर सेट करने के बारे में सोच सकता हूं।

एक अन्य समाधान मैं के बारे में सोच सकते हैं इस तरह, अपने परीक्षण वर्ग पर URLConf स्थापित करने के लिए है:

class Mytest(TestCase): 
    urls = 'my.urlconf' 

हालांकि यह मिडलवेयर का परीक्षण नहीं होता।

+0

बिल्कुल सही। धन्यवाद! – Leopd