当我使用 运行测试时./manage.py test
,我发送到标准输出的任何内容print
都不会显示。当测试失败时,我会在每个失败的测试中看到一个“stdout”块,所以我猜 Django 会捕获它(但在测试通过时不会显示它)。
问问题
32710 次
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.5
nose==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 回答