我在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
答案 0 :(得分:7)
您必须更改为通话后的格式。试试format='json'
response = self.client.post(self.url, self.base_data, format='json')