如何 运行 在 Django 中使用 `DEBUG=TRUE` 进行测试
How to run tests with `DEBUG=TRUE` in Django
我正在尝试为我的自定义错误页面视图编写测试:-
可以找到文档 here
另外,为了编写测试用例,我已经按照建议包含了这些 url 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)
当我手动点击该 url 时,我得到了正确的响应代码,即 500
用于访问 /500
等等。
由于只有在默认情况下 setting.DEBUG=True
和 DEFAULT=False
中的测试用例 运行 和模式下才会包含这些 url,因此我尝试使用 @override_settings
decorator
覆盖它
我的 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/')
断言错误:404 != 400
注意 :- 相同的错误代码 '404is returned when i visited these url with
DEBUG=False`。
这是一种测试您的 500 的方法
from django.test import TestCase
from django.test.client import RequestFactory
from .views import my_custom_error_view
class TestMyErrorPages(TestCase):
def test_error_handlers(self):
factory = RequestFactory()
request = factory.get('/')
response = my_custom_error_view(request)
self.assertEqual(response.status_code, 500)
我正在尝试为我的自定义错误页面视图编写测试:- 可以找到文档 here
另外,为了编写测试用例,我已经按照建议包含了这些 url 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)
当我手动点击该 url 时,我得到了正确的响应代码,即 500
用于访问 /500
等等。
由于只有在默认情况下 setting.DEBUG=True
和 DEFAULT=False
中的测试用例 运行 和模式下才会包含这些 url,因此我尝试使用 @override_settings
decorator
我的 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/')
断言错误:404 != 400
注意 :- 相同的错误代码 '404is returned when i visited these url with
DEBUG=False`。
这是一种测试您的 500 的方法
from django.test import TestCase
from django.test.client import RequestFactory
from .views import my_custom_error_view
class TestMyErrorPages(TestCase):
def test_error_handlers(self):
factory = RequestFactory()
request = factory.get('/')
response = my_custom_error_view(request)
self.assertEqual(response.status_code, 500)