Когда я запускаю тесты с ./manage.py test
, все, что я отправляю на стандартный вывод через print
, не отображается. Когда тесты терпят неудачу, я вижу блок "stdout" за неудачный тест, поэтому я думаю, что Django его ловушки (но не показывает его, когда проходят тесты).
Как увидеть stdout при запуске тестов Django?
Ответ 1
Проверено TEST_RUNNER
в settings.py
, оно использует конкретный проект, который вызывает нос. Нос имеет параметр -s
, чтобы остановить его от захвата stdout
, но если я запустил:
./manage.py test -s
manage.py
сначала фиксирует его и выдает ошибку "нет такой опции". Справка для manage.py
не упоминает об этом, но я обнаружил, что если я запустил:
./manage.py test -- -s
он игнорирует -s
и позволяет мне захватить его на стороне пользовательского бегуна, передавая его носу без проблем.
Ответ 2
Да, эта проблема вызвана NoseTestSuiteRunner
. Добавление -- -s
является хитрым и не лучшим решением. Попробуйте добавить следующие строки в settings.py
:
NOSE_ARGS = ['--nocapture',
'--nologcapture',]
Это решило мои проблемы.
Ответ 3
Вероятно, у вас есть промежуточный тестовый бегун, такой как нос, перехват и сохранение stdout. Попробуйте либо запустить тесты Django напрямую, либо вместо этого записать в stderr.
Ответ 4
Используя текущие версии всех соответствующих пакетов (Django==1.11.2
, django-nose==1.4.5
и nose==1.3.7
), достаточно добавить флаг --nocapture
во время выполнения ваших тестов. Таким образом, простой
./manage.py test --nocapture
будет достаточно.
Конечно, конечно, у вас
TEST_RUNNER = "django_nose.NoseTestSuiteRunner"
в settings.py