2009-08-05 48 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

相关问题