Jor*_*sen 5 rspec ruby-on-rails
我在从 AR 对象中删除对服务对象 (QuickbooksService) 的调用时遇到问题。据我所知,该方法应该正确存根并返回我指定的值,但是当我运行规范时,我可以看到该方法被调用并且失败。
这是我正在测试的对象的类定义。
class Order < ActiveRecord::Base
def create_invoice
QuickbooksService.new(:estimate).create_invoice(arg1, arg2, arg3)
end
end
Run Code Online (Sandbox Code Playgroud)
并来自 order_spec
describe("#create_invoice") do
expect(QuickbooksService.new(:estimate)).to receive(:create_invoice).and_return(1)
end
Run Code Online (Sandbox Code Playgroud)
我也尝试过
allow(QuickbooksService.new(:estimate)).to receive(:form_invoice_create).with(anything()).and_return(1)
Run Code Online (Sandbox Code Playgroud)
1因此,该方法不是返回而是create_invoice在 QuickbooksService 内部执行。任何见解将不胜感激!
您遇到的问题是您正在存根一个单独的实例。即,当您定义期望时,您告诉它期望特定实例收到对该方法的调用,但是当执行代码时,它会创建一个不同的实例。您需要做的是允许任何实例接收该方法调用。类似的东西allow_any_instance_of(QuickbooksService).to receive(:invoice_create)会起作用,但更好的做法是创建一个双精度,例如:
let(:quickbooks_service) { instance_double(QuickbooksService) }
describe("#create_invoice") do
before { allow(quickbooks_service).to receive(:create_invoice).and_return(1) }
it "Creates quickbook invoice" do
order.create_invoice
expect(quickbooks_service).to have_received(:create_invoice)
end
end
Run Code Online (Sandbox Code Playgroud)
请参阅: https: //relishapp.com/rspec/rspec-mocks/docs
| 归档时间: |
|
| 查看次数: |
5142 次 |
| 最近记录: |