RSpec:我们可以配置一个期望返回两个不同的值吗?我想测试重试机制



所以我在应用程序中有一个重试规则。我想用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

相关内容

  • 没有找到相关文章

最新更新