【发布时间】:2018-02-04 10:07:53
【问题描述】:
我正在尝试为我的自定义错误页面视图编写测试:- 文档可以找到here
为了编写测试用例,我已经按照here 的建议包含了这些网址:-
if settings.DEBUG:
urlpatterns += [
url(r'^404/$', page_not_found_view),
url(r'^500/$', my_custom_error_view),
url(r'^400/$', bad_request_view),
url(r'^403/$', permission_denied_view),
]
handler404 = page_not_found_view
handler500 = my_custom_error_view
handler403 = permission_denied_view
handler400 = bad_request_view
views.py 是:-
def page_not_found_view(request):
t = loader.get_template('error/HTTP404.html')
html = html = t.render({})
return HttpResponseNotFound(html)
def my_custom_error_view(request):
t = loader.get_template('error/HTTP500.html')
html = html = t.render({})
return HttpResponseServerError(html)
def permission_denied_view(request):
t = loader.get_template('error/HTTP403.html')
html = html = t.render({})
return HttpResponseForbidden(html)
def bad_request_view(request):
t = loader.get_template('error/HTTP400.html')
html = html = t.render({})
return HttpResponseBadRequest(html)
当我手动点击该网址时,我得到了正确的响应代码,即500 用于访问/500 等等。
由于只有在默认情况下 setting.DEBUG=True 并且测试用例在 DEFAULT=False 和模式下运行时才会包含这些 URL,因此我尝试使用 @override_settings 装饰器覆盖它
我的 test.py 文件是:-
@override_settings(DEBUG=True)
class ErroCodeUrl(TestCase):
def test_400_error(self):
response = self.client.get('/400/')
self.assertEqual(response.status_code, 500)
def test_403_error(self):
response = self.client.get('/403/')
self.assertEqual(response.status_code, 500)
def test_404_error(self):
response = self.client.get('/404/')
self.assertEqual(response.status_code, 500)
def test_500_error(self):
response = self.client.get('/500/')
self.assertEqual(response.status_code, 500)
但是使用这个@override_settings 并没有任何区别,不管有没有它,我都会得到相同的断言错误。我为每个测试获得 404 状态代码,即
对于test_500_error:-
响应 = self.client.get('/500/')
断言错误:404 != 500
对于test_400_error :-
响应 = self.client.get('/500/')
AssertionError: 404 != 400
注意 :- 相同的错误代码 '404is returned when i visited these url withDEBUG=False`。
【问题讨论】:
-
有没有看这个答案500 [stackoverflow.com/a/43139905/2581266][
标签: python django pytest django-testing