所以我在应用程序中有一个重试规则。我想用rspec测试一下。
当我调用服务没有传递帐户ID时,它应该给我false,当传递帐户ID时,它应该给我true。
我正在尝试这个代码
options = {
email: 'dev@dev.com'
}
expect_any_instance_of(PaymentService::CreatePayment).to receive(:call)
.with(options)
.and_return(false)
options[:account_id] = 12345
expect_any_instance_of(PaymentService::CreatePayment).to receive(:call)
.with(options)
.and_return(true)
但这对我不起作用。
尝试重写为:
invalid_options = {
email: 'dev@dev.com'
}
expect_any_instance_of(PaymentService::CreatePayment).to receive(:call)
.with(invalid_options)
.and_return(false)
valid_options = {
email: 'dev@dev.com',
account_id: 12345
}
expect_any_instance_of(PaymentService::CreatePayment).to receive(:call)
.with(valid_options)
.and_return(true)
所以我想出了一个方法来做到这一点。
expect_any_instance_of(PaymentService::CreatePayment).to receive(:call).twice do |_, _, options|
options[:account_id].present? ? true : false
end