web-dev-qa-db-fra.com

Comment puis-je tester les unités Django urls?

J'ai atteint une couverture de test de 100% dans mon application partout sauf mon urls.py. Avez-vous des recommandations sur la façon dont je pourrais écrire significatif tests unitaires pour mes URL?

FWIW Cette question s'est posée alors que j'expérimente avec le développement piloté par les tests et que je veux des tests qui échouent avant d'écrire du code pour les corriger.

47
meshy

Une façon serait de reverse les noms d'URL et de valider

Exemple

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

Maintenant, dans le test

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/')

Vous testez probablement les vues de toute façon.

Maintenant, pour tester que l'URL se connecte à la bonne vue, vous pouvez utiliser resolve

from Django.urls import resolve

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

Maintenant, dans la variable resolver ( ResolverMatch instance de classe), vous avez les options suivantes

 'app_name',
 'app_names',
 'args',
 'func',
 'kwargs',
 'namespace',
 'namespaces',
 'url_name',
 'view_name'
56
karthikr