2009-08-05 11 views
30

quando ho eseguito test con ./manage.py test, qualunque cosa io mando sullo standard output attraverso print non mostra. Quando i test falliscono, vedo un blocco "stdout" per test fallito, quindi credo che Django lo intrappoli (ma non lo mostri quando i test passano).Come vedo lo stdout quando eseguo i test di Django?

+0

aggiungere l'opzione '-s' –

+1

Si dovrebbe contrassegnare si possiede risposta come corretta dal momento che è. – Catskul

risposta

30

Controllato TEST_RUNNER in settings.py, sta utilizzando un corridore specifico del progetto che chiama Naso. Naso ha la possibilità -s per impedirgli di catturare stdout, ma se corro:

./manage.py test -s

manage.py cattura per primo e genera un errore "tale opzione". L'aiuto per manage.py non menziona questo, ma ho scoperto che se corro:

./manage.py test -- -s

ignora il -s e mi permette di catturare sul lato del corridore personalizzato, passarlo a naso senza un problema.

+2

Perché sto usando il framework contrib.sites, specificando --settings per i miei test. Quando lo faccio, il flag -s funziona come previsto, e passa in un altro - prima che il -s lanci un OSError (nessun file di questo tipo). – ken

+2

Solo per la cronaca. Se hai django_south installato in INSTALLED_APPS __after__ django_nose non ti permetterà di dare le opzioni per nose (come -s). Devi mettere sud __before__ django_nose in INSTALLED_APPS. Era il problema con me – yakxxx

+0

Stranamente questo sembra funzionare per me con 'print (...)', ma l'output di una bella stampa con 'pprint.pprint (...) 'non viene visualizzato nella console. –

4

Probabilmente hanno qualche test runner intermedi, come il naso, intercettare e memorizzare stdout. Prova a eseguire direttamente i test di Django oppure scrivi invece a stderr.

+0

Avevi ragione. L'esecuzione diretta dei test di django non funziona perché ci sono molte impostazioni che il runner personalizzato fa, ma sono riuscito a rintracciare il problema e correggerlo. Ora questa è la mia prima domanda qui, quindi è ok modificare la domanda per includere la soluzione come sopra? Grazie! – hsribei

+0

La cosa migliore è pubblicare la tua risposta. –

+0

Proprio fatto. Grazie! – hsribei

32

Sì, questo problema è causa di NoseTestSuiteRunner. Aggiungi -- -s è una soluzione complicata ma non la migliore. Tenta di aggiungere le linee seguire le settings.py:

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

che ha risolto i miei problemi.

+4

Questa è la risposta corretta. Il metodo '- -s' causa effetti collaterali indesiderati. – adam

0

Utilizzando le versioni correnti di tutti i pacchetti rilevanti (Django==1.11.2, django-nose==1.4.5 e nose==1.3.7) è sufficiente aggiungere il flag --nocapture quando si esegue i test. Così un semplice

./manage.py test --nocapture 

sarà sufficiente.

Certo, naturalmente, che avete

TEST_RUNNER = "django_nose.NoseTestSuiteRunner" 

nel vostro settings.py

Problemi correlati