如何使用django测试框架测试未找到的404?
我正在尝试使用Django1.4的测试框架自动化404页测试 如果在运行development server的情况下在浏览器地址栏中打印如何使用django测试框架测试未找到的404?,django,testing,http-status-code-404,Django,Testing,Http Status Code 404,我正在尝试使用Django1.4的测试框架自动化404页测试 如果在运行development server的情况下在浏览器地址栏中打印127.0.0.1:8000/something/really/wird/,我会看到一个404页面,其状态为“404未找到”(如firebug所示) 但如果我尝试使用此代码进行测试: from django.test import TestCase class Sample404TestCase(TestCase): def test_wrong_uri
127.0.0.1:8000/something/really/wird/
,我会看到一个404页面,其状态为“404未找到”(如firebug所示)
但如果我尝试使用此代码进行测试:
from django.test import TestCase
class Sample404TestCase(TestCase):
def test_wrong_uri_returns_404(self):
response = self.client.get('something/really/weird/')
self.assertEqual(response.status_code, 404)
此输出导致测试失败:
$./manage.py test main
Creating test database for alias 'default'...
.F
======================================================================
FAIL: test_wrong_uri_returns_404 (main.tests.Sample404TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File ".../main/tests.py", line 12, in test_wrong_uri_returns_404
self.assertEqual(response.status_code, 404)
*AssertionError: 200 != 404*
----------------------------------------------------------------------
Ran 2 tests in 0.031s
FAILED (failures=1)
Destroying test database for alias 'default'...
我对这里有200个代码感到非常惊讶。有人知道这到底是为什么吗
更新:
下面是URL.py:
实际失败的测试是:
def test_wrong_uri_returns_404(self):
response = self.client.get('/something/really/weird/')
self.assertEqual(response.status_code, 404)
项目中的一切都在发生试试看
response = self.client.get('/something/really/weird/') # note the '/' before something
127.0.0.1:8000/something/really/wird/
是相对于根的路径中的/something/really/wird/
,而不是
something/真的/奇怪
something/really/wird/
/something/真的/奇怪
class TemplateView(TemplateResponseMixin, View):
"""
A view that renders a template.
"""
def get_context_data(self, **kwargs):
return {
'params': kwargs
}
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
因此,您的类所做的只是一个render_to_响应,它生成一个“200”响应
如果需要重写404处理程序,则应在视图中执行类似操作:
return HttpResponseNotFound('<h1>Page not found</h1>')
返回HttpResponseNotFound('未找到页面')
(我不知道基于类的视图中的等效项)
或者更好的是,可以避免自定义视图吗?要自定义404显示,您只需创建一个404.html模板(在站点的模板/目录中),Django的错误查看器就会获取该模板。您的URL.py是什么样子的?下面的回答者关于前导“/”是正确的,但即使这样,你也不应该因为一个荒谬的url而得到200分。我已经更新了问题描述。确切的文件在这里:谢谢,但这并没有改变什么,我仍然得到代码200。谢谢!关于自定义视图-我使用.haml而不是.html,因此我需要将404视图映射到404.haml而不是404.html。