Эффективный способ тестирования логов с Django - PullRequest
0 голосов
/ 07 мая 2019

В моих файлах Django я делаю некоторые записи в журнале довольно просто:

# myapp/view.py

import logging

logger = logging.getLogger(__name__)

...
        # somewhere in a method
        logger.warning("display some warning")

Затем, предположим, я хочу проверить, что это предупреждение записано.В тестовом наборе я обычно делал бы:

# myapp/test_view.py

...
    # somewhere in a test class
    def test_logger(self):
        with self.assertLogs("myapp.view") as logger:
            # call the view

        self.assertListEqual(logger.output, [
            "WARNING:myapp.view:display some warning"
        ])

Таким образом, выход регистратора отключается, и я могу его протестировать.Это прекрасно работает, когда я запускаю тесты для этого представления только с:

./manage.py test myapp.test_view

, но не когда я запускаю все тесты:

./manage.py test

, где я получаю эту ошибку:

Traceback (most recent call last):
  File "/home/neraste/myproject/myapp/test_view.py", line 34, in test_logger
    # the call of the view
AssertionError: no logs of level INFO or higher triggered on myapp.view

Итак, что мне делать?Я могу использовать unittest.mock.patch, чтобы высмеивать вызовы logger, но я нахожу этот путь уродливым, особенно если вы передаете аргументы своему регистратору.Более того, assertLogs просто предназначен для этого, поэтому мне интересно, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...