2017-10-09 19 views
1

我写一个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_emailclient_id之前跳了下去。

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

+1

尝试使用OderdedDict https://docs.python.org/2/library/collections.html#collections.OrderedDict – neverwalkaloner

回答

1

使用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')]) 
相关问题