2016-03-14 71 views
0

我正在为使用我们的API在Ruby中编写客户端。我们使用rspec和VCR和webmock来模拟对API的请求/响应。在哪里以及如何期待Rspec/VCR存根响应?

当响应有效载荷真的很大时,什么是测试API响应的最佳方法?

是否有最佳做法围绕在哪里放大预期有效载荷以及如何测试?

require 'spec_helper' 

describe Service::API, vcr: true do 
    describe '.method' do 
    it 'returns valid response' do 
     #returns large body payload 
     response = subject.method 
     expect(response).to eq ??? 
    end 
    end 
end 
+0

响应有多大? –

+0

40 KB的原始json(几千行格式化的json)。 – doremi

回答

0

你不应该测试负载,你需要测试的方法做你希望与什么样的有效载荷。录像机将负责存储有效载荷。你可能需要断言你发送了你期望的API,并声明你对结果做了什么。您还应该测试失败情况,例如API超时或网络错误等,但测试中您确实不需要触及负载本身。

您可能会发现它有助于将测试分解成各种场景;

  • 给出给出一个糟糕的呼叫例如正确的PARAMS
  • 通话在API缺少资源结束
  • 给网络错误

我往往会发现它更容易只是写一些明显的情况下,然后从断言为每一个开始。像下面的东西,有点删节和使用RSpec,但你应该明白了;

describe Transaction do 
    # Create a real object in the api. 
    let(:transaction) { create :transaction } 

    describe '.find', :vcr do 
    context 'given a valid id' do 
     subject { Transaction.find(transaction.id) } 

     it 'returns a Transaction object' do 
     is_expected.to eq(transaction) 
     end 
    end 

    context 'given an invalid transaction_id' do 
     subject { Transaction.find('my-bad-transaction') } 

     it 'should rescue Gateway::NotFoundError' do 
     is_expected.to be_nil 
     end 

     it 'raises no NotFoundError' do 
     expect { subject }.to raise_error(Gateway::NotFoundError) 
     end 
    end 
    end 
end 
相关问题