Подтвердить что ты не робот

Django UrlResolver, добавление URL-адресов во время выполнения для тестирования

Я хочу сделать некоторые тесты, и я пока не очень хорошо знаком с URLResolver, но я бы хотел быстро решить эту проблему.

В TestCase, я хотел бы добавить URL-адрес для распознавателя, чтобы затем использовать Client.get('/url/') и сохранить его отдельно от urls.py.

4b9b3361

Ответ 2

Так как 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 может применяться либо ко всему классу, либо к определенному методу.

Ответ 3

Я знаю, что это было задано некоторое время назад, но я подумал, что снова ответю на это, чтобы предложить что-то более полное и актуальное.

У вас есть два варианта решения этого вопроса: один - предоставить свой собственный файл 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-адреса будут кэшироваться, а исправление вашей обезьяны не вступит в силу, если вы проведете тест вместе с другими тестовыми примерами.