rspec升级到3.1.0后,与allow_any_instance_of一起使用的and_call_original无法正常工作

时间:2018-10-16 14:47:51

标签: ruby-on-rails rspec

我在rspec 2.14.1中有一个代码,例如

allow_any_instance_of(AnyClass)。接收(:some_method).and_call_original

具有相应的消息期望

expect_any_instance_of(AnyClass)。接收(:some_method)。

以上在rspec 2.14.1中运行良好。升级到rspec 3.1.0后,以上代码将不再起作用。失败,因为消息期望some_method甚至不会被调用

但是,如果我更改存根,例如 allow_any_instance_of(AnyClass).to receive(:some_method).and_return(value)

在rspec 3.1.0中工作正常。

我只是想了解为什么在rspec升级后将and_call_original与allow_any_instance_of一起使用会失败。

从此链接https://relishapp.com/rspec/rspec-mocks/docs/configuring-responses/calling-the-original-implementation中可以看到,and_call_original仅在部分双打中受支持。

这是否意味着使用allow_any_instance_of不会是部分double?

1 个答案:

答案 0 :(得分:0)

and_call_original与allow_any_instance_of一起使用时确实有效。

请参阅any_instance的规范,该规范使我们对使用and_call_original进行模拟或取消存根的不同方式有了想法,https://github.com/rspec/rspec-mocks/blob/master/spec/rspec/mocks/any_instance_spec.rb

要回答上述问题,我使用消息期望的方式是错误的。应该是

allow_any_instance_of(AnyClass).to接收(:any_method).and_call_original 期望(AnyClass.new.any_method)。到eq(:any_method_value)

我正在尝试使用Expect_any_instance_of而不是引起问题的期望。