【发布时间】:2021-02-21 21:46:59
【问题描述】:
我有一个类 MyVoucherClass,它在 Rails 应用程序中调用单独的服务。
在我正在测试的类 VoucherIssuer 中,我正在调用 MyVoucherClass 的两个类方法 issue_voucher 和 activate_voucher,它们 POST 到单独的服务。
我想存根整个MyVoucherClass 以及它的类方法返回的值。从 RSpec 文档和进一步搜索中,我发现以下内容应该有效:
subject(:issue_credits) { described_class.new.issue_credits }
let(:my_voucher_class_double) do
class_double(MyVoucherClass,
issue_voucher: { voucher_id: "ABC123" }.to_json,
activate_voucher: instance_double(VoucherClass, voucher_id: "ABC123")
).as_stubbed_const
end
context “when using MyVoucherClass” do
it “calls on MyVoucherService” do
issue_credits
end
end
但是,它会抛出错误:
WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: POST [separate service url]
这意味着方法返回值存根不起作用。
我正在使用多个 allow(MyVoucherClass) ... and_return() 语句来解决这个问题,但我想知道为什么类 double 和 as_stubbed_const 不起作用,因为最好在一个 class_double 而不是 allow 中执行两次。
【问题讨论】:
标签: ruby-on-rails ruby rspec mocking