В моих файлах 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
просто предназначен для этого, поэтому мне интересно, что не так.