Django 测试在响应状态代码 404 上抛出错误
Django test throwing an error on response status code 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 测试时它会在这个测试中抛出一个错误,基本上是说没有匹配的航班:
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.......E..
======================================================================
ERROR: test_invalid_flight_page (flights.tests.FlightTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\sarah\Desktop\airline\flights\tests.py", line 68, in test_invalid_flight_page
response = c.get(f"/flights/{max_id + 1}")
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 732, in get
response = super().get(path, data=data, secure=secure, **extra)
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 393, in get
return self.generic('GET', path, secure=secure, **{
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 470, in generic
return self.request(**r)
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 709, in request
self.check_exception(response)
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 571, in check_exception
raise exc_value
File "C:\Python\Python385\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Python\Python385\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\sarah\Desktop\airline\flights\views.py", line 21, in flight
flight = Flight.objects.get(pk=flight_id)
File "C:\Python\Python385\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python\Python385\lib\site-packages\django\db\models\query.py", line 429, in get
raise self.model.DoesNotExist(
flights.models.Flight.DoesNotExist: Flight matching query does not exist.
----------------------------------------------------------------------
Ran 10 tests in 0.120s
FAILED (errors=1)
Destroying test database for alias 'default'...
但这就是重点,没有具有该 ID 的航班,因此该请求的响应状态代码应等于 404。据我所知,我已经准确地从讲座中复制了代码,但讲师的测试是运行一切都好。谁能看到我可能遗漏了什么?
当我将预期的 response.status_code 更改为 200 self.assertEqual(response.status_code, 200)
时,它给了我同样的错误,所以这向我表明主要问题在于响应行?
如果您还需要查看任何内容,请告诉我。
当查询解析为空时,您的视图 class 没有处理。在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")
我正在听关于 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 测试时它会在这个测试中抛出一个错误,基本上是说没有匹配的航班:
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.......E..
======================================================================
ERROR: test_invalid_flight_page (flights.tests.FlightTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\sarah\Desktop\airline\flights\tests.py", line 68, in test_invalid_flight_page
response = c.get(f"/flights/{max_id + 1}")
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 732, in get
response = super().get(path, data=data, secure=secure, **extra)
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 393, in get
return self.generic('GET', path, secure=secure, **{
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 470, in generic
return self.request(**r)
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 709, in request
self.check_exception(response)
File "C:\Python\Python385\lib\site-packages\django\test\client.py", line 571, in check_exception
raise exc_value
File "C:\Python\Python385\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Python\Python385\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\sarah\Desktop\airline\flights\views.py", line 21, in flight
flight = Flight.objects.get(pk=flight_id)
File "C:\Python\Python385\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python\Python385\lib\site-packages\django\db\models\query.py", line 429, in get
raise self.model.DoesNotExist(
flights.models.Flight.DoesNotExist: Flight matching query does not exist.
----------------------------------------------------------------------
Ran 10 tests in 0.120s
FAILED (errors=1)
Destroying test database for alias 'default'...
但这就是重点,没有具有该 ID 的航班,因此该请求的响应状态代码应等于 404。据我所知,我已经准确地从讲座中复制了代码,但讲师的测试是运行一切都好。谁能看到我可能遗漏了什么?
当我将预期的 response.status_code 更改为 200 self.assertEqual(response.status_code, 200)
时,它给了我同样的错误,所以这向我表明主要问题在于响应行?
如果您还需要查看任何内容,请告诉我。
当查询解析为空时,您的视图 class 没有处理。在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")