Я настроил приложение Django под названием lucy_web
для регистрации ошибок на Airbrake, используя pybrake
.В модуле в иерархии lucy_web
, lucy_web.lib.session_recommendations
, я определил функцию тестирования:
import logging
logger = logging.getLogger(__name__)
def log_something():
logger.error("Logging something...")
Если я вызываю эту функцию из оболочки Django, например:
(venv) Kurts-MacBook-Pro-2:lucy-web kurtpeek$ python manage.py shell
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.3.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from lucy_web.lib.session_recommendation import *
In [2]: log_something()
Я вижу сообщение об ошибке:
Однако, если я определю тест и попытаюсь вызвать его оттуда, я нене появляется никаких новых случаев появления ошибки:
from django.test import TestCase
from django.core import mail
class SessionRecommendationTestCase(TestCase):
def test_airbrake_notification_if_session_type_does_not_exist(self):
from lucy_web.lib.session_recommendation import log_something
log_something()
import ipdb; ipdb.set_trace()
Запуск этой команды не привел к появлению каких-либо новых случаев ошибки на приборной панели Airbrake.Кроме того, mail.outbox
пусто:
(venv) Kurts-MacBook-Pro-2:lucy-web kurtpeek$ python manage.py test lucy_web.tests.test_session_recommendation.SessionRecommendationTestCase.test_airbrake_notification_if_session_type_does_not_exist
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
--Return--
None
> /Users/kurtpeek/Documents/Dev/lucy2/lucy-web/lucy_web/tests/test_session_recommendation.py(377)test_airbrake_notification_if_session_type_does_not_exist()
375 from lucy_web.lib.session_recommendation import log_something
376 log_something()
--> 377 import ipdb; ipdb.set_trace()
ipdb> mail.outbox
[]
Как я понимаю из https://docs.djangoproject.com/en/2.0/topics/testing/tools/#email-services, в рамках теста, Django перенаправляет всю электронную почту, отправленную Django, в фиктивную папку исходящих сообщений mail.outbox
.Я не ожидал бы этого в случае с Airbrake, хотя, поскольку электронные письма, вероятно, отправлялись их бэкэндом - и если бы это было так, я бы не ожидал, что mail.outbox
будет пустым.
ПочемуЯ не получаю уведомления Airbrake для теста?Это что-то более общее, например, что все журналы отключены / захвачены во время теста?