不幸的是,我需要与 Soap API 进行交互。如果这还不够糟糕,API 会启用参数排序,这意味着,不管它是 XML 的事实,它都必须以正确的元素顺序构造。
我正在使用 Savon,所以我正在构建一个有序的哈希。然而,经过一些重构,真正的调用停止工作,而我的所有测试都继续通过。一个典型的测试如下所示:
it 'should receive correctly ordered hash' do
example_id = 12345789
our_api = Example::ApiGateway.new()
params = {:message=>{'ApiKey' => api_key, 'ExampleId' => example_id}}
Savon::Client.any_instance.should_receive(:call).with(:get_user_details, params).and_return(mocked_response())
our_api.get_user(example_id: example_id)
end
哈希比较完全不关心键的顺序,因此无论接收到的实际哈希顺序如何,此测试都会通过。我想只获取该call
方法接收的参数,然后我可以比较每个哈希的有序键,但我不知道如何做到这一点。
如何确保 Savon 调用以正确的顺序接收消息哈希?