如何在Django测试中正确标注client.post响应的类型?
解决Django测试中Client响应的类型标注问题
你遇到的核心问题是混淆了服务端响应类和测试客户端返回的响应类型:
你的代码里把client.post的返回值标注为JsonResponse,但Django测试客户端(django.test.client.Client)的请求方法返回的是**django.test.client.Response对象**,而非服务端生成的JsonResponse。JsonResponse是服务端用来构造JSON响应的类,测试时客户端会把服务端的响应封装成自己的Response实例,这个实例自带json()方法,但IDE会因为你标注了错误的类型而无法识别该方法。
解决步骤:
- 导入测试客户端的
Response类型:
from django.test.client import Response
- 修改变量的类型标注为
Response:
修改后的完整代码:
from django.test.client import Response import pytest @pytest.mark.django_db def my_test( self, client, ): with monkeypatch_requests(resp_json={'values': []}): r: Response = client.post( self.endpoint, self.request_payload, content_type='application/json', ) assert r.status_code == 201, r.content assert r.json() == {'key': value}
补充说明:
调试时看到的functools.partial对象,正是测试客户端Response类中json()方法的实现——它绑定了客户端的_parse_json方法来解析响应内容,这也验证了返回值确实是测试客户端的Response实例,而非JsonResponse。
内容的提问来源于stack exchange,提问作者Vulwsztyn
相关产品推荐
相关产品推荐

