52

当我使用 运行测试时./manage.py test,我发送到标准输出的任何内容print都不会显示。当测试失败时,我会在每个失败的测试中看到一个“stdout”块,所以我猜 Django 会捕获它(但在测试通过时不会显示它)。

4

5 回答 5

45

TEST_RUNNER入后settings.py,它使用了一个调用 Nose 的特定于项目的运行器。鼻子可以-s选择阻止它捕获stdout,但如果我运行:

./manage.py test -s

manage.py首先捕获它并抛出“没有这样的选项”错误。的帮助manage.py没有提到这一点,但我发现如果我运行:

./manage.py test -- -s

它忽略了-s并让我在自定义跑步者的一侧捕捉它,毫无问题地将它传递给鼻子。

于 2009-08-06T15:09:16.503 回答
42

是的,这个问题是由NoseTestSuiteRunner. 添加-- -s是棘手的,不是最好的解决方案。尝试在中添加以下行settings.py

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

这解决了我的问题。

于 2014-04-01T05:48:07.667 回答
18

有几个级别的详细信息会影响我们看到的细节数量:您可以尝试:

python manage.py test -v 2

其他可用级别是:

  • -v 0: 最少的细节

  • -v 1: 默认

  • -v 2: 更多详细信息,例如包括打印语句。

于 2020-10-12T12:49:53.273 回答
6

使用所有相关包(和)的当前版本Django==1.11.2,在运行测试时添加标志就足够了。因此一个简单的django-nose==1.4.5nose==1.3.7--nocapture

./manage.py test --nocapture

就足够了。

当然,你有

TEST_RUNNER = "django_nose.NoseTestSuiteRunner"

在你的settings.py

于 2017-10-11T11:47:34.530 回答
4

您可能有一些中间测试运行程序,例如 Nose,拦截和存储标准输出。尝试直接运行 Django 测试,或者改为写入 stderr。

于 2009-08-05T23:51:09.037 回答