2017-06-15 47 views
-8

我测试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) 
+0

如果你真的想抑制控制台输出可能是很方便的看到测试自己的代码。追溯是一回事,导致它的代码是另一回事。 :) – Maarten

+0

此问题已被错误地标记为重复。这个问题是关于在测试通过时抑制控制台输出中的错误。链接的问题是关于异常处理程序未正确配置时的意外测试结果。 – Nexus

回答

-1

很可能通过重新定义stdoutstderr处理程序暂时禁用所有的Python输出 - 有“抑制蟒蛇输出”的搜索。或者,您可以在您的测试的Django设置文件中更改您的LogLevel

0

其实,如果你想取消所有回溯,你需要使用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,))) 
+0

这给了我'AssertionError:Http404没有提出' –

+0

@ dan-klasson哇,这很奇怪。因为它应该,如果它在你的代码中引发,我不知道它为什么不在这里提出。 –

+0

请注意,客户端捕获异常*,在测试*中没有发现异常。是的,OP正在使用上下文管理器错误(您需要在返回的响应对象上测试状态码,请参阅下文)。 –