如何调试测试?例如,我发布一个条目,希望它验证并返回一个特定的页面。它可以在浏览器和shell中工作,但测试是唯一失败的(讽刺的是!)。我想把响应打印到控制台或其他东西上,这样我就可以读取错误或您的错误。但我只能看到我在视图中看到的东西。
不确定是否有必要,但这里有来自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)
最后的断言是不正确的。如果我将其更改为显示“field required”错误的原始表单页中的值,则它将通过。我只是看不到我错过了什么。
我还有一些其他的测试,但是我不知道如何调试。
怎么做的?
你可以加入一个
pdb
检查所有的东西。如果您使用的是
nose
,我相信您必须使用-s
运行测试这就是使您无法立即看到输出的原因。
最简单的方法是在断言之前添加
print response.content
。输出可能有点过大,但通常足以让您发现问题所在。如果这不能解决问题,文档中列出了大量的功能,可以提供帮助。添加一些打印语句,看看你得到了什么。这里有一些建议,但不要局限于这些,文档中有更多的工具。
https://docs.djangoproject.com/en/dev/topics/testing/
首先,您需要检查页面是否按您预期的方式实际重定向。尝试使用
redirect_chain
或assertRedirects
。我怀疑你的帖子数据出于某种原因无效。您可以从响应上下文中获取表单。
要在pdb下运行测试:
我同意阿拉斯代尔的观点,print response.content(以及一般的打印内容)是一个很好的帮助。输出会与正常的测试运行器输出混淆,一旦发现问题并修复它,就应该将其删除,但它可以帮助您缩小问题的范围。
另外,如果代码在浏览器和shell中工作,而不是在单元测试中,请记住单元测试会生成一个新的(空的)数据库。确保安装程序输入测试所需的任何数据。
(更新了帕特里克建议的代码部分,谢谢帕特里克)
相关问题 更多 >
编程相关推荐