2009-08-05 7 views
30

Cuando ejecuto pruebas con ./manage.py test, todo lo que envío a la salida estándar a través de print no se muestra. Cuando las pruebas fallan, veo un bloque "stdout" por prueba fallida, así que supongo que Django lo atrapa (pero no lo muestra cuando pasan las pruebas).¿Cómo veo stdout cuando ejecuto las pruebas de Django?

+0

añadir opción '-s' –

+1

Deberá marcar es el propietario responda como correcta ya que es. – Catskul

Respuesta

30

Controlado TEST_RUNNER en settings.py, está utilizando un corredor específico del proyecto que llama a Nose. nariz tiene la opción -s para que deje de capturar stdout, pero si me quedo:

./manage.py test -s

manage.py capta primero y genera un error "no existe la opción". La ayuda para manage.py no menciona esto, pero he encontrado que si corro:

./manage.py test -- -s

ignora el -s y me permite capturarlo en el lado del corredor de encargo, de pasarla a la nariz sin ningún problema.

+2

Como utilizo el marco contrib.sites, especifico - ajustes para mis pruebas. Cuando lo hago, -s señala las funciones como se espera, y pasa a otro - antes de que -s arroje un OSError (No hay ese archivo -s). – ken

+2

Solo para el registro. Si tienes django_south instalado en INSTALLED_APPS __after__ django_nose, no te permitirá dar opciones para la nariz (como -s). Debes poner al sur __antes de__ django_nose en INSTALLED_APPS. Fue el problema conmigo – yakxxx

+0

Curiosamente, esto parece funcionar para mí con 'print (...)', pero el resultado de impresión bonita con 'pprint.pprint (...) 'no aparece en la consola. –

4

Probablemente tenga algún corredor de prueba intermedio, como Nariz, interceptando y almacenando stdout. Pruebe ejecutando las pruebas de Django directamente, o escriba a stderr en su lugar.

+0

Tenías razón. Ejecutar las pruebas django directamente no funciona porque hay muchas cosas de configuración que hace el corredor personalizado, pero pude rastrear el problema y solucionarlo. Ahora esta es mi primera pregunta aquí, entonces ¿está bien editar la pregunta para incluir la solución anterior? ¡Gracias! – hsribei

+0

Lo mejor es publicar tu propia respuesta. –

+0

Acabo de hacer. ¡Gracias! – hsribei

32

Sí, este problema se debe a NoseTestSuiteRunner. Agregar -- -s es una solución difícil pero no la mejor. Trate de añadir líneas de seguimiento en el settings.py:

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

que solucionó mis problemas.

+4

Esta es la respuesta correcta. El método '- -s' causa efectos secundarios no deseados. – adam

0

El uso de versiones actuales de todos los paquetes relevantes (Django==1.11.2, y django-nose==1.4.5nose==1.3.7) es suficiente añadir la bandera --nocapture cuando se ejecuta sus pruebas. Por lo tanto, un simple

./manage.py test --nocapture 

será suficiente.

Por supuesto, por supuesto, que tiene

TEST_RUNNER = "django_nose.NoseTestSuiteRunner" 

en su settings.py

Cuestiones relacionadas