我在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?
答案 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而不是引起问题的期望。