如何期望在Rails中使用某些参数将消息发送到任何类的实例(总共两次)?

Fli*_*lip 6 rspec ruby-on-rails

退款时,我们需要停用附有该订单的连续出版物.在规范中,订单有两个连续出版物,我必须要求对API进行两次调用,以便停用序列号.

我试过了:

expect_any_instance_of(Gateway).to receive(:deactivate_dongle).once.with(serial_number: '67890')
expect_any_instance_of(Gateway).to receive(:deactivate_dongle).once.with(serial_number: '12345')
Run Code Online (Sandbox Code Playgroud)

这给了我:

The message 'deactivate_dongle' was received by #<Gateway:70179265658480 @connection=#<Faraday::Connection:0x007fa7c4667b28>> but has already been received by #<Gateway:0x007fa7c6858160>
Run Code Online (Sandbox Code Playgroud)

同样的:

expect_any_instance_of(Gateway).to receive(:deactivate_dongle).with(serial_number: '12345')
expect_any_instance_of(Gateway).to receive(:deactivate_dongle).with(serial_number: '67890')
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bas*_*zwo 4

如果您可以更改实现以使您的期望针对已知实例Gateway(为了避免expect_any_instance_of),您可以使用 rspec 的ordered方法来添加对接收消息的约束。

我担心在你的情况下,你应该尝试添加一个规范,其中只涉及其中一个连续剧,这样你就可以正确地期待它。例如

expect_any_instance_of(Gateway).to receive(:deactivate_dongle).once.with(serial_number: '67890')
Run Code Online (Sandbox Code Playgroud)

然后有一个包含 n 个连续剧的规范,并期望deactivate_dongle被调用 n 次。