Как я могу переопределить настройки для кода, запущенного в urls.py во время модульного тестирования djangoPython

Программы на Python
Ответить
Anonymous
 Как я могу переопределить настройки для кода, запущенного в urls.py во время модульного тестирования django

Сообщение Anonymous »

В моем приложении django есть env var DEMO, который, помимо прочего, определяет, какие конечные точки объявляются в моем файле urls.py.
Я хочу для модульного тестирования этих конечных точек я попробовал django.test.override_settings, но обнаружил, что urls.py запускается только один раз, а не один раз за модульный тест.
Мой код вот так:

Код: Выделить всё

# settings.py

DEMO = os.environ.get("DEMO", "false") == "true"

Код: Выделить всё

# urls.py

print(f"urls.py: DEMO = {settings.DEMO}")
if settings.DEMO:
urlpatterns += [
path('my_demo_endpoint/',MyDemoAPIView.as_view(),name="my-demo-view")
]

Код: Выделить всё

# test.test_my_demo_endpoint.py

class MyDemoEndpointTestCase(TestCase):
@override_settings(DEMO=True)
def test_endpoint_is_reachable_with_demo_equals_true(self):
print(f"test_endpoint_is_reachable_with_demo_equals_true: DEMO = {settings.DEMO}")
response = self.client.get("/my_demo_endpoint/")
# this fails with 404
self.assertEqual(response.status_code, 200)

@override_settings(DEMO=False)
def test_endpoint_is_not_reachable_with_demo_equals_false(self):
print(f"test_endpoint_is_not_reachable_with_demo_equals_false: DEMO = {settings.DEMO}")
response = self.client.get("/my_demo_endpoint/")
self.assertEqual(response.status_code, 404)

при запуске я получаю:

Код: Выделить всё

urls.py: DEMO = False
test_endpoint_is_reachable_with_demo_equals_true: DEMO = True

test_endpoint_is_not_reachable_with_demo_equals_false: DEMO = False

urls.py запускается только один раз перед каждым тестом, однако я хочу протестировать различное поведение urls.py в зависимости от настроек.
Используя другой Файл настроек для тестирования не является решением, поскольку разные тесты требуют разных настроек. Прямой вызов моего представления в модульном тесте означает, что код urls.py остается непокрытым, а его поведение непроверенным, поэтому это тоже не то, что мне нужно.
Как я могу переопределить настройки для запускаемого кода urls.py?
Спасибо, что уделили время.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-django
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»