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

我正在听一个关于 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),它给了我同样的错误,所以这向我表明主要问题在于响应行?如果您还需要查看其他内容,请告诉我。


浮云间
浏览 114回答 2
2回答

至尊宝的传说

当查询解析为空时,您的视图类不会进行处理。其django做法如下:try:    result = SomeModel.objects.get(pk=some_id)except SomeModel.DoesNotExist:    # Return 404 here

三国纷争

我遇到了同样的问题。事实上,它来自响应行或 client.get() 方法本身。就我而言,我在引号末尾添加“/”,如下所示:response = c.get(f"/flights/{max_id + 1}/")然后检查断言条件。现在它按我想要的方式运行。还发现:如果您用单词而不是数字替换为无效页面,它就可以正常工作。例如:这个没问题(检测到 404):response = c.get(f"/flights/whatever")这个不起作用(未检测到 404,并发出错误警报):response = c.get(f"flights/15")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python