Django UrlResolver, hinzufügen von urls zur Laufzeit zum testen
Ich bin auf der Suche zu tun, einige tests, und ich bin nicht wirklich vertraut mit der URLResolver
ganz noch nicht, aber ich möchte dieses Problem lösen schnell.
In einem TestCase
möchte ich hinzufügen, eine URL für den resolver so, dass ich dann nutzen kann Client.get('/url/')
und halten Sie Sie getrennt von urls.py
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
https://docs.djangoproject.com/en/2.1/topics/testing/tools/#urlconf-configuration
Im test:
Wird dieser
myapp/test_urls.py
alsROOT_URLCONF
.Seit Django 1.8 die Verwendung von
django.test.TestCase.urls
ist veraltet. Sie könnendjango.test.utils.override_settings
statt:override_settings
angewendet werden kann, entweder zu einer ganzen Klasse oder einer bestimmten Methode.from myapp.urls import urlpatterns as base_patterns
und dannurlpatterns = base_patterns + [<your custom patterns here>]
Ich weiß, das war fragte vor einer Weile, aber ich dachte, ich würde ihm Antworten wieder etwas bieten komplette und up-to-date.
Haben Sie zwei Möglichkeiten, um dieses Problem zu lösen, ist Ihre eigene urls-Datei, wie vorgeschlagen, durch SystemParadox Antwort:
Die andere ist der monkey-patch-urls. Dies ist NICHT die empfohlene Methode zum Umgang mit überschreiben von urls, aber Sie könnten in eine situation kommen, wo Sie es noch brauchen. Um dies zu tun für einen einzelnen Testfall, ohne den rest sollten Sie es tun, in Ihrem
setUp()
Methode und dann Aufräumen in IhremtearDown()
Methode.Bitte beachten Sie, dass dies nicht funktionieren wird, wenn du weglassen, die
urls
class-Attribut. Dies ist, da die urls sonst zwischengespeichert werden und Ihre monkey-patching wird nicht wirksam, wenn Sie führen Sie Ihren test zusammen mit anderen Testfälle.my_app.urls
in diesem Fall ist die Standard-app-urls-Modul, nicht um einen test ein, und es ist ein hacky zwingen, die urls neu zu laden. Habe ich gerade Hinzugefügt, weil ich unvermittelt auf einen Fall, in dem monkey-patching, die tatsächlich benötigt weit Bemühung code als neu eine ganze urls Modul.Konnte es nicht laufen mit den oben genannten Antworten. Auch nicht mit der
override_settings
.Eine Lösung gefunden, die für mich funktioniert. Mein Anwendungsfall war, zu schreiben, integration tests, wo ich testen will put/post Methoden dort, wo ich die urls von meine app.
Der wichtigste Hinweis hier, ist die Verwendung der
set_urlconf
Funktiondjango.urls
anstelle von überschreiben Sie in der Klasse oder mitoverride_settings
.