在Django测试控制台输出中避免异常回溯
我测试Django视图返回Http404
异常,使用assertRaises(Http404)
并且测试传递的很好。问题是,我测试的控制台输出看起来是这样的:在Django测试控制台输出中避免异常回溯
Creating test database for alias 'default'...
Traceback (most recent call last):
File "/home/dan/project/django/project/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/dan/project/django/project/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/dan/project/django/project/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/home/dan/project/django/project/local/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "/home/dan/project/django/project/local/lib/python2.7/site-packages/django/views/generic/detail.py", line 117, in get
self.object = self.get_object()
File "/home/dan/project/django/project/local/lib/python2.7/site-packages/django/views/generic/detail.py", line 56, in get_object
{'verbose_name': queryset.model._meta.verbose_name})
Http404: No contact found matching the query
什么,为了避免这个例外,回溯出现在我的控制台输出的好办法?
违规代码:
def test_authorization(self):
user = UserFactory(name='some other user', email='[email protected]')
self.client.force_login(user)
response = self.client.get(reverse('portal-detail-contact', args=(self.contact.id,)))
self.assertRaises(Http404)
很可能通过重新定义stdout
和stderr
处理程序暂时禁用所有的Python输出 - 有“抑制蟒蛇输出”的搜索。或者,您可以在您的测试的Django设置文件中更改您的LogLevel
。
其实,如果你想取消所有回溯,你需要使用self.assertRaises()
作为上下文经理:
def test_authorization(self):
user = UserFactory(name='some other user', email='[email protected]')
self.client.force_login(user)
with self.assertRaises(Http404):
response = self.client.get(reverse('portal-detail-contact', args=(self.contact.id,)))
这给了我'AssertionError:Http404没有提出' –
@ dan-klasson哇,这很奇怪。因为它应该,如果它在你的代码中引发,我不知道它为什么不在这里提出。 –
请注意,客户端捕获异常*,在测试*中没有发现异常。是的,OP正在使用上下文管理器错误(您需要在返回的响应对象上测试状态码,请参阅下文)。 –
如果你真的想抑制控制台输出可能是很方便的看到测试自己的代码。追溯是一回事,导致它的代码是另一回事。 :) – Maarten
此问题已被错误地标记为重复。这个问题是关于在测试通过时抑制控制台输出中的错误。链接的问题是关于异常处理程序未正确配置时的意外测试结果。 – Nexus