Подтвердить что ты не робот

Как увидеть stdout при запуске тестов Django?

Когда я запускаю тесты с ./manage.py test, все, что я отправляю на стандартный вывод через print, не отображается. Когда тесты терпят неудачу, я вижу блок "stdout" за неудачный тест, поэтому я думаю, что Django его ловушки (но не показывает его, когда проходят тесты).

4b9b3361

Ответ 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