【问题标题】:How to run tests with `DEBUG=TRUE` in Django如何在 Django 中使用 `DEBUG=TRUE` 运行测试
【发布时间】: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`。

【问题讨论】:

标签: python django pytest django-testing


【解决方案1】:

这是一种测试 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)

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多