使用嵌套对象与Django Rest Framework和单元测试

时间:2016-03-21 09:18:05

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

我在Django Rest Framework端点上编写了几个单元测试,没有遇到任何麻烦,直到我尝试在POST请求中传递嵌套对象:

class BookTestCase(APIVersion, APITestCase):
    def setUp(self):
        self.url = self.reverse_with_get_params('book')
        self.user = CustomerFactory.create().user
        self.base_data = {"foo": "bar",
                          "credit_card": {"card_number": "1234567812345678",
                                          "expiration_date": "1116",
                                          "security_code": "359"},
                          "foo2": "bar2"}

    def test_book(self):
        add_token_to_user(self.user, self.client)

        response = self.client.post(self.url, self.base_data)

        self.assertEqual(response.status_code, 200)

然后,在最开始使用pdb.set_trace()运行相关的网络服务,这里是request.DATA的内容:

<QueryDict: {u'foo': [u'bar'],
             u'credit_card': [u'expiration_date', u'security_code', u'card_number'],
             u'foo2': [u'bar2']}>

正如您所看到的,每个level1对象都已正确填充,但信用卡内容已消失。

有什么想法吗?谢谢!

注意:Django 1.6 / Rest Framework 2

1 个答案:

答案 0 :(得分:7)

您必须更改为通话后的格式。试试format='json'

response = self.client.post(self.url, self.base_data, format='json')