我正在听一个关于 django 测试的讲座,这是测试之一: def test_invalid_flight_page(self): max_id = Flight.objects.all().aggregate(Max("id"))["id__max"] c = Client() response = c.get(f"/flights/{max_id + 1}") self.assertEqual(response.status_code, 404)当我运行 manage.py 测试时,它会在此测试中引发错误,本质上是说没有匹配的航班:但这就是重点,没有具有该 id 的航班,因此该请求的响应状态代码应等于 404。据我所知,我已从讲座中准确复制了代码,但讲师的测试都运行正常。谁能看到我可能缺少什么?当我将预期的response.status_code更改为200时self.assertEqual(response.status_code, 200),它给了我同样的错误,所以这向我表明主要问题在于响应行?如果您还需要查看其他内容,请告诉我。
2 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
当查询解析为空时,您的视图类不会进行处理。其django做法如下:
try:
result = SomeModel.objects.get(pk=some_id)
except SomeModel.DoesNotExist:
# Return 404 here
三国纷争
TA贡献1804条经验 获得超7个赞
我遇到了同样的问题。事实上,它来自响应行或 client.get() 方法本身。就我而言,我在引号末尾添加“/”,如下所示:
response = c.get(f"/flights/{max_id + 1}/")
然后检查断言条件。现在它按我想要的方式运行。
还发现:如果您用单词而不是数字替换为无效页面,它就可以正常工作。例如:
这个没问题(检测到 404):
response = c.get(f"/flights/whatever")
这个不起作用(未检测到 404,并发出错误警报):
response = c.get(f"flights/15")
添加回答
举报
0/150
提交
取消