Я знаю, что это было задано некоторое время назад, но я подумал, что снова ответю на это, чтобы предложить что-то более полное и современное.
У вас есть два варианта решения этого один должен предоставить файл собственный URL, как это было предложено ответить SystemParadox в:
class MyTestCase(TestCase):
urls = 'my_app.test_urls'
Другой обезьяне залатать ваши URLs. Это НЕ рекомендуемый способ справиться с переопределением 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-адреса будут кэшироваться, а исправление вашей обезьяны не вступит в силу, если вы проведете тест вместе с другими тестовыми примерами.
Но зачем вам это делать, используйте путь обезьяны в качестве последнего средства, когда вы не можете должным образом объявить что-то. Здесь вы явно устанавливаете 'my_app.urls' только для того, чтобы изменить пару строк позже! – ppetrid
Это, конечно, не рекомендуемый способ, как правило, переопределять тестовые URL-адреса - 'my_app.urls' в этом случае является модулем URL-адресов приложений по умолчанию, а не тестовым, и это хакерский способ принудительного перезагрузки URL-адресов. Я просто добавил его, потому что столкнулся с ситуацией, когда исправление обезьян действительно требовало большого кода усилий, чем воссоздать весь модуль URL. – Geekfish