我有:
- 调用第 3 方 API (lib) 的 Web 服务包装器
- 调用该包装器并进行一些处理(服务)的服务
用 VCR 测试 lib 类效果很好,但我不确定如何测试服务。具体来说,我如何在服务内部存根 API 调用?
class GetBazsForBars
def self.call(token)
bazs = Foo.new(token).bars
# do some other stuff
bazs
end
end
和测试:
require 'rails_helper'
RSpec.describe GetBazsForBars, type: :service do
describe ".call" do
let(:token) { Rails.configuration.x.test_token }
let(:bazs) { GetBazsForBars.call(token) }
it { expect(bazs.any?).to eq(true) }
end
end
我不希望将 Foo 传递给服务。
在 Payola 中,作者使用 StripeMock 来模拟响应。我可以写一些类似的东西,比如调用 VCR 并让服务使用它的 FooMock 吗?
不确定如何使用 Ruby 执行此操作,我习惯于将 C#/Java DI 传递给构造函数。
谢谢您的帮助。
更新
移至完整答案