如何对Django rest框架请求进行单元测试?

Vil*_*oja 5 python django rest unit-testing django-rest-framework

我有一个Django-rest-framework API,我想对其进行单元测试。更具体地说,我想分别对某些数据验证方法进行单元测试。这些数据验证方法将获得一个请求作为其参数,如下所示:

def validate(request)
Run Code Online (Sandbox Code Playgroud)

为了单独测试它,我需要一种创建请求的方法。在django-rest-framework中,有APIRequestFactory,可用于创建请求。主要问题是,APIRequestFactory将不会创建django-rest-framework使用的相同请求。相反,它将按照站点所述创建常规的django请求:

注意:使用API​​RequestFactory时,返回的对象是Django的标准HttpRequest,而不是REST框架的Request对象,该对象仅在调用视图后才生成。

但是,由于这些验证方法使用django-rest-frameworks请求,因此无法使用API​​RequestFactory对它们进行单元测试。有什么办法可以分别对它们进行单元测试,还是应该只使用API​​Client并尝试测试整个APIView?我不想这样做,因为那样的话它将不是一个纯粹的单元测试。使用API​​Client,我只能得到响应,而不能得到请求。为什么没有django-rest-framework请求的APIRequestFactory?我的意思是,如果这些是django-rest中使用的那些,那么为什么请求工厂不生成那些呢?

Vil*_*oja 1

可以通过不将请求发送到验证方法,而是发送 request.DATA 来绕过此问题。这样,验证方法就可以独立于请求,但仅依赖于发送给它们的数据。