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

ils*_*005 2 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)
Run Code Online (Sandbox Code Playgroud)

我发布到此端点的 json 对象通常如下所示:

{"watchlist": [32, 12, 23], "sortedoutlist": [1, 2,3 ]}
Run Code Online (Sandbox Code Playgroud)

现在我为此视图设置了一个测试用例:

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)
Run Code Online (Sandbox Code Playgroud)

的问题是,watchlistsortedoutlist在所述视图收到没有lists,但int含有SENT列表的最后的值(监视列表是23和sortedoutlist是3。

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

Sel*_*cuk 5

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

r = self.client.post(url, data, format='json')
Run Code Online (Sandbox Code Playgroud)