如何在Django测试客户端中保持POST参数的顺序?

时间:2017-10-09 12:06:55

标签: python django rest unit-testing paypal

我正在为Django视图编写单元测试,我在单元测试中有这个:

data_from_paypal_other_id = {'client_id': '1', 'receiver_email': 'badguy@example.com', 'amount': '1.5'}
self.client.post(reverse('paypal_ipn_listener'), data=data_from_paypal_other_id)

问题是PayPal要求我以特定顺序发送带有参数的POST请求。 Don't ask me why, see this

Django测试客户端我看到参数乱码:

--BoUnDaRyStRiNg
Content-Disposition: form-data; name="receiver_email"

badguy@example.com
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="amount"

1.5
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="client_id"

1
--BoUnDaRyStRiNg--

请注意,receiver_email之前client_id已跳过。

我的问题是如何强制Django测试客户端保持参数的顺序?

1 个答案:

答案 0 :(得分:1)

使用collections.OrderedDict代替dict应该可以解决问题。确保使用序列而不是原始字典对其进行初始化,例如:

from collections import OrderedDict

data_from_paypal_other_id = OrderedDict([
    ('client_id', '1'), ('receiver_email', 'badguy@example.com'),
    ('amount', '1.5')])