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

Как вы устанавливаете DEBUG в True при запуске теста Django?

В настоящее время я запускаю несколько тестов Django и по умолчанию выглядит DEBUG=False. Есть ли способ запустить конкретный тест, где я могу установить DEBUG=True в командной строке или в коде?

4b9b3361

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

  • Запустите сервер и просмотрите страницу.

Теперь вы можете увидеть отладочный вывод.