如何测试发送到外部API的参数的正确性

时间:2014-01-26 13:17:26

标签: ruby-on-rails ruby unit-testing rspec

我有外部API端点,比方说:http://www.fake_me_hard.com/api。我想从我的应用程序中调用一些。 端点接受以下结构作为参数:

  {   
  :amount => amount, 
  :backurl => root_path,
  :language => locale,
  :orderid => order_id, 
  :pm => payment_method, 
  :accept_url => "/payment/success", 
  :exception_url  =>  "/payment/failure", 
 }

收集此哈希是负责方法EndpointRequestCollector.give_me_hash。 我应该如何测试give_me_hash是否返回正确的结构?

我可以使用相同的策略在specsclass中创建此结构,以便:

class EndpointRequestsCollector
  def self.give_me_hash
    {
       #....collecting hash #1
    }
  end
end

describe EndpointRequestCollector do
  context '.give_me_hash' do
    it 'returns proper structure' do
      expect(described_class.give_me_hash).to eq(
        {
          #... collecting hash #2
        }
       )
    end
  end
end

...但它会在2个地方重复相同的代码,并且不会测试任何东西。

你知道对这个问题有什么好处吗?

1 个答案:

答案 0 :(得分:0)

也许:

let(:args) {["amount", "backurl", "language", "orderid", "pm", "accept_url", "exception_url"]}
#...
it 'returns proper structure' do
  described_class.give_me_hash.each_key do |key|
    expect(key).to satisfy{|key| args.include?(key)}
  end
end