如何在Django测试客户端保持POST参数的顺序?
问题描述:
我写一个Django视图中的单元测试,我有这个在我的单元测试:如何在Django测试客户端保持POST参数的顺序?
data_from_paypal_other_id = {'client_id': '1', 'receiver_email': '[email protected]', 'amount': '1.5'}
self.client.post(reverse('paypal_ipn_listener'), data=data_from_paypal_other_id)
问题是贝宝需要我带参数按照特定的顺序发送POST请求。 Don't ask me why, see this。
Django的测试客户端我看到搞砸顺序参数:
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="receiver_email"
[email protected]
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="amount"
1.5
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="client_id"
1
--BoUnDaRyStRiNg--
注意receiver_email
client_id
之前跳了下去。
我的问题是我如何强制Django测试客户端保持参数的顺序?
答
使用collections.OrderedDict
而不是dict
应该这样做。请确保您有序列而不是原来的字典,e.g初始化:
from collections import OrderedDict
data_from_paypal_other_id = OrderedDict([
('client_id', '1'), ('receiver_email', '[email protected]'),
('amount', '1.5')])
尝试使用OderdedDict https://docs.python.org/2/library/collections.html#collections.OrderedDict – neverwalkaloner