如何 运行 在 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=TrueDEFAULT=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 withDEBUG=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)