如何使用django-restframework testclient发布列表

时间:2016-02-27 14:29:32

标签: python django unit-testing django-rest-framework

我正在为我的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)

问题是视图中收到的watchlistsortedoutlist不是lists,而是int包含已发送列表的最后一个值(监视列表是23和sortedoutlist是3.

我在这里做错了什么?如何在测试用例中发布列表?

1 个答案:

答案 0 :(得分:2)

Client.post的默认格式是多部分。您需要使用format parameter指定json

r = self.client.post(url, data, format='json')