Как увидеть стандартный вывод при запуске тестов Django? - PullRequest
37 голосов
/ 06 августа 2009

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

Ответы [ 4 ]

37 голосов
/ 01 апреля 2014

Да, эта проблема вызвана NoseTestSuiteRunner. Добавление -- -s является хитрым и не лучшим решением. Попробуйте добавить следующие строки в settings.py:

NOSE_ARGS = ['--nocapture',
             '--nologcapture',]

Это решило мои проблемы.

34 голосов
/ 06 августа 2009

Установлен TEST_RUNNER в settings.py, он использует специфичный для проекта бегун, который обращается к Носу. Нос имеет опцию -s, чтобы остановить его захват stdout, но если я запускаю:

./manage.py test -s

manage.py сначала захватывает его и выдает ошибку «без такой опции». Справка по manage.py не упоминает об этом, но я обнаружил, что если я запущу:

./manage.py test -- -s

он игнорирует -s и позволяет мне захватить его на стороне произвольного бегуна, без проблем передавая его Носу.

4 голосов
/ 06 августа 2009

Возможно, у вас есть промежуточный тестовый прогон, такой как Nose, перехват и хранение stdout Попробуйте либо запустить тесты Django напрямую, либо вместо этого написать в stderr.

3 голосов
/ 11 октября 2017

Используя текущие версии всех соответствующих пакетов (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

...