为了账号安全,请及时绑定邮箱和手机立即绑定

Django 测试在响应状态代码 404 上抛出错误

Django 测试在响应状态代码 404 上抛出错误

浮云间 2024-01-16 15:12:30
我正在听一个关于 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


查看完整回答
反对 回复 2024-01-16
?
三国纷争

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")


查看完整回答
反对 回复 2024-01-16
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信