Ответ 1
https://docs.djangoproject.com/en/1.5/topics/testing/overview/#urlconf-configuration
В вашем тесте:
class TestMyViews(TestCase):
urls = 'myapp.test_urls'
Это будет использовать myapp/test_urls.py
как ROOT_URLCONF
.
Я хочу сделать некоторые тесты, и я пока не очень хорошо знаком с URLResolver
, но я бы хотел быстро решить эту проблему.
В TestCase
, я хотел бы добавить URL-адрес для распознавателя, чтобы затем использовать Client.get('/url/')
и сохранить его отдельно от urls.py
.
https://docs.djangoproject.com/en/1.5/topics/testing/overview/#urlconf-configuration
В вашем тесте:
class TestMyViews(TestCase):
urls = 'myapp.test_urls'
Это будет использовать myapp/test_urls.py
как ROOT_URLCONF
.
Так как Django 1.8 использование django.test.TestCase.urls
устарело. Вместо этого вы можете использовать django.test.utils.override_settings
:
from django.test import TestCase
from django.test.utils import override_settings
urlpatterns = [
# custom urlconf
]
@override_settings(ROOT_URLCONF=__name__)
class MyTestCase(TestCase):
pass
override_settings
может применяться либо ко всему классу, либо к определенному методу.
Я знаю, что это было задано некоторое время назад, но я подумал, что снова ответю на это, чтобы предложить что-то более полное и актуальное.
У вас есть два варианта решения этого вопроса: один - предоставить свой собственный файл urls, как это было предложено в ответ SystemParadox:
class MyTestCase(TestCase):
urls = 'my_app.test_urls'
Другой - это обезьяна, исправляющая ваши URL-адреса. Это НЕ рекомендуемый способ справиться с переопределением URL-адресов, но вы можете попасть в ситуацию, когда вам все еще нужно. Чтобы сделать это для одного тестового примера, не затрагивая остальных, вы должны сделать это в своем методе setUp()
, а затем очистить в своем методе tearDown()
.
import my_app.urls
from django.conf.urls import patterns
class MyTestCase(TestCase):
urls = 'my_app.urls'
def setUp(self):
super(MyTestCase, self).setUp()
self.original_urls = my_app.urls.urlpatterns
my_app.urls.urlpatterns += patterns(
'',
(r'^my/test/url/pattern$', my_view),
)
def tearDown(self):
super(MyTestCase, self).tearDown()
my_app.urls.urlpatterns = self.original_urls
Обратите внимание, что это не будет работать, если вы опустите атрибут класса urls
. Это связано с тем, что в противном случае URL-адреса будут кэшироваться, а исправление вашей обезьяны не вступит в силу, если вы проведете тест вместе с другими тестовыми примерами.