【问题标题】:Using nested objects with Django Rest Framework and unit tests在 Django Rest Framework 和单元测试中使用嵌套对象
【发布时间】:2016-07-07 17:21:02
【问题描述】:

我在我的 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()开头运行相关的web服务,这里是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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 好的,现在我觉得自己很愚蠢,我不知道这一点 :) 非常感谢。
    • 有趣的是,在 REST-API 时代它实际上默认为 format='garbage'
    • 注意可以在项目级别设置默认:django-rest-framework.org/api-guide/testing/…
    猜你喜欢
    • 2016-12-12
    • 2017-04-09
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2018-05-14
    • 2019-01-13
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多