我正在为我的api视图编写单元测试。现在我遇到的问题是我无法使用testclient
提供的django-restframwork
发布列表:
我的观点如下:
@detail_route(methods=['post'])
def dosomestuff(self, request, slug, *args, **kwargs):
watchlist = request.data.get('watchlist', [])
sortedoutlist = request.data.get('sortedoutlist', [])
# create some objects
...
return Response('success'), status=status.HTTP_201_CREATED)
我发布到此端点的json对象通常如下所示:
{"watchlist": [32, 12, 23], "sortedoutlist": [1, 2,3 ]}
现在我为此视图设置了一个测试用例:
class MyTestCase(APITestCase):
def test_dosomestuff(self):
url = reverse('dosomestuff')
data = {'watchlist': [32, 12, 23],
'sortedoutlist': [1, 2,3 ]}
r = self.client.post(url, data)
self.assertEqual(r.status_code, status.HTTP_201_CREATED)
问题是视图中收到的watchlist
和sortedoutlist
不是lists
,而是int
包含已发送列表的最后一个值(监视列表是23和sortedoutlist是3.
我在这里做错了什么?如何在测试用例中发布列表?
答案 0 :(得分:2)
Client.post
的默认格式是多部分。您需要使用format
parameter指定json
:
r = self.client.post(url, data, format='json')