Когда я запускаю тесты с ./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