2009-08-05 49 views
30

當我運行./manage.py test的測試時,無論我通過print發送到標準輸出,都不顯示。當測試失敗時,我會在每次失敗測試中看到一個「stdout」塊,所以我猜Django會將其陷入陷阱(但在測試通過時不會顯示它)。如何在運行Django測試時看到stdout?

+0

加上'-s'選項 – 2013-02-27 00:01:39

+1

你應該標記您自己的答案是正確的,因爲它是。 – Catskul 2014-08-19 15:41:34

回答

30

檢查TEST_RUNNERsettings.py,它使用一個項目特定的跑步者呼叫鼻子。 鼻子有-s選項從捕獲stdout阻止它,但如果我運行:

./manage.py test -s

manage.py第一捕獲它並拋出一個「沒有這樣的選擇」的錯誤。爲manage.py幫助並沒有提到這一點,但我發現,如果我跑:

./manage.py test -- -s

它忽略了-s,讓我捕捉到它的可定製的運行的身邊,將它傳遞給鼻子沒有問題。

+2

因爲我正在使用contrib.sites框架,所以我爲我的測試指定了--settings。當我這樣做時,-s標誌函數按預期運行,並在另一個函數中傳遞 - 在-s拋出一個OSError(沒有這樣的文件)之前。 – ken 2011-12-19 18:21:55

+2

只是爲了記錄。如果您在INSTALLED_APPS __after__ django_nose中安裝了django_south,它不會讓您給出鼻子選項(如-s)。你需要在INSTALLED_APPS中放置__before__ django_nose。這是我的問題 – yakxxx 2012-10-04 21:29:40

+0

奇怪的是,這似乎對'print(...)'有效,但是使用'pprint打印輸出。pprint(...)'不顯示在控制檯中。 – 2016-05-12 00:21:00

4

你可能有一些中間測試運行者,比如鼻子,攔截和存儲標準輸出。嘗試直接運行Django測試,或者寫入stderr。

+0

你說得對。直接運行django測試不起作用,因爲自定義運行器有很多設置,但我能夠跟蹤問題並修復它。現在這是我的第一個問題,編輯問題以包含上述解決方案是否可行?謝謝! – hsribei 2009-08-06 00:29:15

+0

最好的事情是發佈你自己的答案。 – 2009-08-06 11:19:02

+0

剛剛做到了。謝謝! – hsribei 2009-08-06 15:12:05

32

是的,這個問題是由NoseTestSuiteRunner造成的。添加-- -s是一個棘手但不是最好的解決方案。 嘗試在settings.py添加如下行:

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

這解決了我的問題。

+4

這是正確的答案。 ' - -s'方法引起不希望的副作用。 – adam 2014-09-23 17:47:50

0

使用當前版本的所有相關軟件包(Django==1.11.2,django-nose==1.4.5nose==1.3.7),在運行測試時添加--nocapture標誌就足夠了。因此,一個簡單的

./manage.py test --nocapture 

就足夠了。

誠然,當然,你有

TEST_RUNNER = "django_nose.NoseTestSuiteRunner" 

settings.py

相關問題