Ban*_*ank 7 python django django-testing
我需要使用 django 测试虚拟客户端为 Django 中的自定义 handler404 和 handler500 编写一些测试。第一个很容易测试,而我对第二个有问题。
基本上,问题在于 Django 测试客户端没有捕获异常并且没有路由到正确的处理程序。这是一个问题,因为我们需要测试是否使用了正确的自定义处理程序和模板。
我们有一个简单的中间件类来模拟测试异常:
class HTTPStatusCodeMiddleware(object):
def process_view(self, request, *args):
if 'cookie_500_error' in request.COOKIES:
raise Exception('Test exception')
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于浏览器中的手动测试。
现在,测试是:
def test_404_template(self):
c = Client()
url = '/not_existing.html'
response = c.get(url)
self.assertEqual(response.status_code, 404) # success
self.assertTemplateUsed(response, 'custom/404.html') # success
def test_500_template(self):
c = Client()
c.cookies['cookie_500_error'] = '1'
response = c.get('/') # here middleware raises exception!!!
self.assertEqual(response.status_code, 500)
self.assertTemplateUsed(response, 'custom/500.html')
Run Code Online (Sandbox Code Playgroud)
任何的想法?我没有选择使用硒。谢谢!
新的测试Client参数raise_request_exception允许控制请求期间引发的异常是否也应该在测试中引发。该值默认为True向后兼容。如果是False并且发生异常,测试客户端将返回带有属性 的 500 响应exc_info,该属性是提供所发生异常信息的元组。
c = Client(raise_request_exception=False)
Run Code Online (Sandbox Code Playgroud)
有关文档中的信息