Unit testing Django REST框架测试:如何将参数传递给POST请求。获取错误400而不是201

Unit testing Django REST框架测试:如何将参数传递给POST请求。获取错误400而不是201,unit-testing,django-rest-framework,http-status-code-400,Unit Testing,Django Rest Framework,Http Status Code 400,这些文章是由管理员创建的。经过身份验证的用户有权阅读并喜欢或不喜欢它们。我需要测试视图 模型是: 类(models.Model): reader=models.ForeignKey(用户,on_delete=models.CASCADE) article=models.ForeignKey(article,on_delete=models.CASCADE) 视图如下(用户不应传递任何参数-他“喜欢”文章,并根据他的id和文章id创建一个新的注册表): class-LikeCreate(gene

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

模型是:

类(models.Model):
reader=models.ForeignKey(用户,on_delete=models.CASCADE)
article=models.ForeignKey(article,on_delete=models.CASCADE)
视图如下(用户不应传递任何参数-他“喜欢”文章,并根据他的id和文章id创建一个新的注册表):

class-LikeCreate(generics.createapiew):
queryset=Like.objects.all()
序列化程序\u类=类似序列化程序
测试类别为:

类TestLikeViews(APITestCase):
def设置(自):
self.factory=apirestfactory()
self.user=user.objects.create\u user(
用户名='Name',电子邮件='Name'test@company.com“,password='top_secret')
self.article=article.objects.create(
作者='X',标题='title',正文='body content…)
self.like=like.objects.create(
reader=self.user,article=self.article)
def test_like_post_用户(自身):
request=self.factory.post('likes/',kwargs={'reader':self.user,'article':self.article})
request.user=self.user
response=LikeCreate.as_view()(请求,reader=self.user,article=self.article)
self.assertEqual(response.status_代码,201,
f'Expected Response Code 201-已创建,收到{Response.status_Code})
我得到以下错误:

第105行,类似测试的用户
f'Expected Response Code 201-已创建,收到{Response.status_Code})
断言错误:400!=201:预期响应代码201-已创建,但收到400。
第105行是带有f字符串的行-最后一行。但是,当我启动服务器并手动检查该端点时,一切正常。我想问题在于我制定测试函数的方式


谢谢大家!

问题可能取决于您处理post函数调用的方式,在post函数中,kwargs作为命名参数发送。这一行应该很好,也只传递PKs,而不是整个对象:

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

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

谢谢,但不幸的是,它没有帮助。我在其他函数中使用了相同的表示法(带有“kwargs”),它可以工作。但是当我尝试按照你的建议去做时,我得到了
TypeError:User类型的对象不是JSON可序列化的
Hello@Irina,你能进一步解释一下你的问题和手动测试方法吗?你说过那样做很好。同时,我修改了答案,尝试了其他可能的方法,我希望它能对您有所帮助。