Django REST Framework 测试:如何将参数传递给 POST 请求。得到错误 400 而不是 201

伊琳娜

文章由管理员创建。经过身份验证的用户有权阅读它们并喜欢它们或不喜欢它们。我需要测试视图。

模型是:

class Like(models.Model):
    reader = models.ForeignKey(User, on_delete = models.CASCADE)
    article = models.ForeignKey(Article, on_delete = models.CASCADE)

视图如下(用户不应该传递任何参数——他“喜欢”这篇文章,并根据他的 id 和文章 id 创建一个新的注册表):

class LikeCreate(generics.CreateAPIView):
    queryset = Like.objects.all()
    serializer_class = LikeSerializer

测试类是:

class TestLikeViews(APITestCase):
    def setUp(self):
        self.factory = APIRequestFactory()
        self.user = User.objects.create_user(
            username='Name', email='[email protected]', password='top_secret')  
        self.article = Article.objects.create(
            author='X', title='Title', body='Body content...')
        self.like = Like.objects.create(
            reader=self.user, article=self.article)

    def test_like_post_user(self):
        request = self.factory.post('likes/', kwargs={'reader': self.user, 'article': self.article}) 
        request.user = self.user 
        response = LikeCreate.as_view()(request, reader=self.user, article=self.article)
        self.assertEqual(response.status_code, 201, 
                        f'Expected Response Code 201 - CREATED, received {response.status_code} instead.')

我收到以下错误:

line 105, in test_like_post_user
    f'Expected Response Code 201 - CREATED, received {response.status_code} instead.')
AssertionError: 400 != 201 : Expected Response Code 201 - CREATED, received 400 instead.

第 105 行是带有 f-string 的行 - 最后一行。但是,当我启动服务器并手动检查此端点时 - 一切正常。我想问题在于我制定测试函数的方式。

谢谢!

天使希门尼斯

问题可能取决于您处理对 post 函数的调用的方式,您将kwargs作为命名参数发送。这条线应该没问题,也只传递 PK 而不是整个对象:

request = self.factory.post('likes/', {'reader': self.user.pk, 'article': self.article.pk})

这是APIRequestFactory处理请求的常用结构

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何忽略错误而不是返回 400 Bad Request? - Django Rest Framework

如何从 Django Rest Framework 接收 POST 请求?

Java Spring Boot POST 方法单元测试返回 400 而不是 201

Django测试由于AssertionError:201!= 400而失败

Django REST Framework:使用列表测试POST请求时出错

Django Rest Framework:如何将额外的参数传递给Django序列化程序?

django rest框架-POST请求导致400状态代码

在后期测试Django-Rest-Framework API中尝试找出400错误的原因

django rest framework-如何将查询参数传递给外键序列化器?

测试Post API接收状态码200而不是201

Django Rest Framework中对象不是可迭代的错误

Django REST Framework-如何返回404错误而不是403错误

Django REST Framework-将额外的参数传递给动作

Django Rest Framework将额外的参数传递给Serializer

django或django-rest-framework中必需的POST参数

KeyError + POST + Django Rest Framework

在 Django Rest Framework 中测试经过身份验证的路由的 POST 请求

无法获得对 Django Rest-framework 的 APIView 的 POST 请求的响应

在 Django Rest Framework 中处理来自可浏览 API 的 POST 请求查询参数

Spring MVC- REST POST-错误请求400

REST'put','post' 400 个错误的请求。Javascript、HTML、Java

如何使用Django Rest Framework ReadOnlyModelViewSet获取“数据”而不是“结果”?

Spring API REST 控制器在 POST 方法后返回 HTTP 406 而不是 HTTP 201

Django Rest Framework:如何将嵌套关系的UUID列表传递给序列化器?

仅在GET上序列化,而不是POST Django REST Framework

Django REST Framework-如何将ForeignKey解析为实际值而不是索引?

如何解决具有地图而不是有效JSON错误请求的Java resttemplate post错误400

Django Rest Framework测试类错误

Django Rest Framework返回dict而不是OrderedDicts