Python 在Django Rest框架中测试时在API请求工厂中调用视图

Python 在Django Rest框架中测试时在API请求工厂中调用视图,python,django,django-rest-framework,Python,Django,Django Rest Framework,每当我们在Django Rest框架中使用API请求工厂测试API时,为什么在已经传递url的情况下调用视图。 为了更好地理解,请查看以下代码 request = self.factory.post("/api/v1/menu/", data) views = MenuResource.as_view({"post": "post"}) response = views(request) response.render() self.assertEqual(201, response.statu

每当我们在Django Rest框架中使用API请求工厂测试API时,为什么在已经传递url的情况下调用视图。 为了更好地理解,请查看以下代码

request = self.factory.post("/api/v1/menu/", data)
views = MenuResource.as_view({"post": "post"})
response = views(request)
response.render()
self.assertEqual(201, response.status_code)
在上面的代码中,我们调用url和视图。正在调用视图以在url上呈现视图,但这不是我的用例。我只想测试响应代码。有没有一种方法可以在不呈现视图的情况下获取响应代码,因为这对于我的用例来说是一种过度杀戮


除了使用API请求工厂,我还寻找了其他方法,但我只是想知道为什么API请求工厂需要调用视图。与Django Rest框架中的其他API测试模块相比,是否有任何优势。

这是因为您没有向URL发出请求

request=self.factory.post(“/api/v1/menu/”,data)
只是创建一个请求对象供您使用,而不是实际发出请求

因此,在您的案例中测试视图包括创建一个请求对象并将其传递给视图,该视图模仿该视图传递和处理实际请求的方式


如果要发送实际请求,需要模拟一个测试服务器,该服务器将处理实际请求。

这是因为您没有向URL发出请求

request=self.factory.post(“/api/v1/menu/”,data)
只是创建一个请求对象供您使用,而不是实际发出请求

因此,在您的案例中测试视图包括创建一个请求对象并将其传递给视图,该视图模仿该视图传递和处理实际请求的方式


如果您想要发送实际请求,您需要模拟一个将处理实际请求的测试服务器。

那么我们为什么需要这样做呢。当我们实际上可以调用请求而不是创建对象时,为什么还要创建一个对象呢。对于单元测试,您不应该关心测试服务器模拟,只关心要执行的函数。那么为什么我们需要这样做呢。当我们实际上可以调用请求而不是创建对象时,为什么还要创建一个对象呢。对于单元测试,您不/不应该关心测试服务器模拟,只关心正在执行的函数。