我在ruby中编写客户端以获取我们正在使用的API。我们使用rspec和VCR与webmock模拟对API的请求/响应。
当响应有效负载非常大时,从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)
您不应该测试有效负载,您需要测试该方法是否符合您对该有效负载的期望。 VCR将负责存储有效载荷。您可能需要断言您将所期望的内容发送给API,并断言您对结果执行的操作。您还应该测试失败方案,例如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