2017-06-15 49 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正在使用上下文管理器錯誤(您需要在返回的響應對象上測試狀態碼,請參閱下文)。 –