Mocha:具有特定参数的存根方法,但不包含其他参数

我想在给定特定参数值时使用Mocha存根方法,并在给出任何其他值时调用原始方法。

当我这样做时:

MyClass.any_instance.stubs(:show?).with(:wanne_show).returns(true) 

我得到了

 unexpected invocation for MyClass.show?(:other_value) 

我也知道,在没有’with’调用的情况下编写模拟时我可以存根所有参数,然后给出我特定的模拟。 但是我必须知道每次通话的返回值,但事实并非如此:/

tldr; 有没有办法在存根中调用原始方法或只存储特定参数并留下其他参数?

答案取决于您正在测试的具体内容。

几点说明:

1)我总是避免使用stubs.any_instance 。 您可以在您的存根/模拟中具体,这可以防止错误测试肯定。

2)我更喜欢使用间谍和存根,主动断言已经调用了某些东西。 为此,我们使用bourne gem。 另一种方法是使用mock,它隐式地测试是否正在调用某些东西(例如,如果没有被调用则会失败)。

所以你的类方法可能看起来像这样(注意,这是RSpec语法):

 require 'bourne' require 'mocha' it 'calls MyClass.show?(method_params)' do MyClass.stubs(:show?) AnotherClass.method_which_calls_my_class expect(MyClass).to have_received(:show?).with('parameter!') end class AnotherClass def self.method_which_calls_my_class MyClass.show?('parameter!') end end 

这里有很多存根/间谍的例子。

希望这可以帮助。