2013-09-24 7 views
32

मैंने अपने urls.py को छोड़कर हर जगह अपने आवेदन में 100% परीक्षण कवरेज हासिल किया है। क्या आपके पास मेरे यूआरएल के लिए अर्थपूर्ण यूनिट परीक्षण लिखने के लिए कोई सिफारिशें हैं?मैं इकाई परीक्षण django urls कैसे करूँ?

FWIW यह सवाल उठ गया है क्योंकि मैं टेस्ट-संचालित विकास के साथ प्रयोग कर रहा हूं और उन्हें ठीक करने के लिए कोड लिखने से पहले परीक्षण विफल करना चाहता हूं।

उत्तर

43

एक तरह से reverse यूआरएल के नाम करने के लिए हो सकता है और मान्य

उदाहरण

urlpatterns = [ 
    url(r'^archive/(\d{4})/$', archive, name="archive"), 
    url(r'^archive-summary/(\d{4})/$', archive, name="archive-summary"), 
] 

अब, परीक्षण

from django.urls import reverse 

url = reverse('archive', args=[1988]) 
assertEqual(url, '/archive/1988/') 

url = reverse('archive-summary', args=[1988]) 
assertEqual(url, '/archive-summary/1988/') 

आप शायद देखा गया वैसे भी परीक्षण कर रहे हैं में होगा।

अब, परीक्षण करने के लिए है जो URL सही दृश्य से कनेक्ट है, तो आप अब इस्तेमाल कर सकते हैं resolve

from django.urls import resolve 

resolver = resolve('/summary/') 
assertEqual(resolver.view_name, 'summary') 

चर resolver (ResolverMatch वर्ग उदाहरण) में, आप निम्न विकल्प हैं

'app_name', 
'app_names', 
'args', 
'func', 
'kwargs', 
'namespace', 
'namespaces', 
'url_name', 
'view_name' 
+2

एफवाईआई मेरे सहयोगियों ने इस अवधारणा को लिया है और इसके लिए एक ["जोर"] (https://github.com/incuna/incuna-test-utils/blob/master/incuna_test_utils/testcases/urls.py#L8) बनाया है [ हमारे नए unittest परीक्षण यूटिल लाइब्रेरी] (https://github.com/incuna/incuna-test-utils)। – meshy

+2

मैं इसका उपयोग कर रहा हूं: 'assertEqual (resolver.func.func_name,' archive ')' परीक्षण करने के लिए कि सही दृश्य पर रिज़ॉलर भूमि। जहां तक ​​मैं समझता हूं 'resolver.view_name' वास्तव में यूआरएल नियम का नाम है, दृश्य नहीं। –

+0

क्या आप सामान्य रूप से Django परीक्षणों (यानी, विचारों के लिए) में यूआरएल के लिए 'रिवर्स (...)' का उपयोग करने का समर्थन करते हैं, या सिर्फ इस मामले में विशेष रूप से इकाई परीक्षण यूआरएल के लिए? मुझे लगता है कि यह देखने के लिए बहुत कुछ उपयोग किया जाता है, लेकिन यह एक विरोधी पैटर्न की तरह लगता है। –

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