Я хочу для модульного тестирования этих конечных точек я попробовал 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?
Спасибо, что уделили время.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-django
Мобильная версия