В настоящее время я запускаю несколько тестов Django и по умолчанию выглядит DEBUG=False
. Есть ли способ запустить конкретный тест, где я могу установить DEBUG=True
в командной строке или в коде?
Как вы устанавливаете DEBUG в True при запуске теста Django?
Ответ 1
Для конкретного теста внутри тестового примера вы можете использовать декоратор override_settings:
from django.test.utils import override_settings
from django.conf import settings
class TestSomething(TestCase):
@override_settings(DEBUG=True)
def test_debug(self):
assert settings.DEBUG
Ответ 2
Начиная с Django 1.11 вы можете использовать --debug-mode
, чтобы установить параметр DEBUG в значение True до запуска тестов.
Ответ 3
Принятый ответ не помог мне. Я использую Selenium для тестирования, а установка @override_settings(DEBUG=True)
заставляет тестовый браузер всегда отображать ошибку 404
на каждой странице. И DEBUG=False
не отображает след трассировки. Поэтому я нашел обходное решение.
Идея состоит в том, чтобы эмулировать поведение DEBUG=True
, используя собственный обработчик 500
и встроенный обработчик ошибок django 500
.
-
Добавьте это в myapp.views:
import sys from django import http from django.views.debug import ExceptionReporter def show_server_error(request): """ 500 error handler to show Django default 500 template with nice error information and traceback. Useful in testing, if you can't set DEBUG=True. Templates: `500.html` Context: sys.exc_info() results """ exc_type, exc_value, exc_traceback = sys.exc_info() error = ExceptionReporter(request, exc_type, exc_value, exc_traceback) return http.HttpResponseServerError(error.get_traceback_html())
-
urls.py:
from django.conf import settings if settings.TESTING_MODE: # enable this handler only for testing, # so that if DEBUG=False and we're not testing, # the default handler is used handler500 = 'myapp.views.show_server_error'
-
settings.py:
# detect testing mode import sys TESTING_MODE = 'test' in sys.argv
Теперь, если в любом из ваших тестов Selenium обнаружена ошибка 500, вы увидите хорошую страницу с отслеживанием и все остальное. Если вы запускаете обычную среду без тестирования, используется обработчик 500 по умолчанию.
Вдохновленный:
Ответ 4
Хорошо, скажем, я хочу написать тесты для тестового теста ошибок, для которых указаны следующие URL: -
urls.py
if settings.DEBUG:
urlpatterns += [
url(r'^404/$', page_not_found_view),
url(r'^500/$', my_custom_error_view),
url(r'^400/$', bad_request_view),
url(r'^403/$', permission_denied_view),
]
test_urls.py: -
from django.conf import settings
class ErroCodeUrl(TestCase):
def setUp(self):
settings.DEBUG = True
def test_400_error(self):
response = self.client.get('/400/')
self.assertEqual(response.status_code, 500)
Надеюсь, у вас есть идея!
Ответ 5
python manage.py test --debug-mode...
Ответ 6
Вы не можете видеть результаты DEBUG=True
при запуске unit test. Страницы не отображаются нигде. Нет браузера.
Изменение DEBUG
не влияет, поскольку веб-страницы (с выходом отладки) нигде не видны.
Если вы хотите увидеть отладочную веб-страницу, связанную с отказом unit test, сделайте это.
-
Отбросьте свою базу данных разработки.
-
Rerun
syncdb
для создания пустой базы данных разработки. -
Запустите различные скрипты
loaddata
, чтобы перестроить приборы для этого теста в вашей базе данных разработки. -
Запустите сервер и просмотрите страницу.
Теперь вы можете увидеть отладочный вывод.