如何调试我的测试?例如,我POST以创建一个条目,并期望它验证并返回一个特定的页面。它适用于浏览器和shell,但测试是唯一失败的(具有讽刺意味!)。我想将响应打印到控制台或其他东西,以便我可以读取错误或你有什么。但我只能看到print
中的内容,例如观点。
不确定是否有必要,但这是tests.py
中有问题的测试代码:
resp = self.client.post('/meal/invite/',
{'summary': 'Test munch', 'when': now(), 'max_diners': '1', 'description': 'Munchies'}, follow=True)
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'Test munch', 1)
self.assertContains(resp, 'You are hosting this meal', 1)
最终断言不正确。如果我将其更改为原始表单页面中显示“字段必需”错误的值,则会通过。我只是看不到我错过的东西。
我还有其他一些测试工作,但我只是不知道如何调试它。
怎么做?
答案 0 :(得分:10)
您可以放入pdb
并检查所有内容。
如果您正在使用nose
,我相信您必须使用-s
-s, --nocapture Don't capture stdout (any stdout output will be
printed immediately) [NOSE_NOCAPTURE]
这使您无法立即看到输出。
答案 1 :(得分:9)
在pdb:
下运行测试python -m pdb manage.py test yourapp
我同意Alasdair的说法,打印回复。内容(以及一般的印刷品)是一个很好的帮助。输出与正常的测试运行器输出混合在一起,一旦发现问题并修复它就应该删除,但它可以帮助您缩小问题范围。
此外,如果代码在浏览器和shell中工作但不在单元测试中工作,请记住单元测试创建一个新的(空)数据库。确保您的setUp输入测试所需的任何数据。
(更新了Patrick建议的代码部分,感谢Patrick)
答案 2 :(得分:4)
最简单的方法是在断言之前添加print response.content
。输出可能有点压倒性,但通常足以让你发现问题。
如果这不能解决问题,那么文档中列出的大量功能可以提供帮助。添加一些打印语句,看看你得到了什么。这里有一些建议,但不要局限于这些,文档中有更多工具。
https://docs.djangoproject.com/en/dev/topics/testing/
首先,您需要检查页面是否按预期重定向。尝试使用redirect_chain
或assertRedirects
。
我怀疑您的帖子数据由于某种原因无效。您可以从响应上下文中获取表单。
form = response.context['form']
print form.is_valid()
print form.errors
答案 3 :(得分:0)
一个人可以将Eclipse IDE与Pydev一起使用,创建一个Debug配置,其中Arguments是测试命令。像这样:
test users.tests.selenium_tests.UsersTestCase.test_user_creation --keepdb --settings=project.settings.test_settings
然后,将Pydev调试器与断点配合使用,并逐步进行工作流,变量,表达式等。
文档在这里(http://www.pydev.org/manual_adv_debugger.html),但不涉及Django。
答案 4 :(得分:0)
如果您使用的是vscode,则可以在root / vscode / launch.json文件中创建新配置,如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "Django RUN",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"runserver",
"--noreload",
"--nothreading"
],
"django": true
},
{
"name": "Django TEST",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"test",
"<your-app-name>",
],
"django": true
}
]
}
这允许您在测试中放置断点并使用vscode进行调试。
答案 5 :(得分:0)
在pycharm中,您可以使用TestCase库在test.py中放置一个测试,然后突出显示该测试,然后rt单击以获取在调试模式下运行test.tests的选项。非常方便,可以在我的常规开发周期中进行单元测试。