2016-03-14 78 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 
相關問題