我想用存根摩卡的方法,只有当一个特定的参数值,并给出调用原始的方法时,给出任何其他值。
当我这样做是这样的:
MyClass.any_instance.stubs(:show?).with(:wanne_show).returns(true)
我得到一个
unexpected invocation for MyClass.show?(:other_value)
我也知道,如果没有'with'呼叫编写模拟的时候,我可以存根的所有参数,然后给我具体的模拟。 但我必须知道每一个电话,这是不是这样的返回值:/
tldr; 有没有一种方法来调用原来的方法存根或存根只是具体参数,离开其他人呢?
答案取决于正是你测试的内容。
几点注意事项:
1)我总是避免使用stubs.any_instance
。 你可以在特定的存根/模拟考试,以防止虚假的检测阳性。
2)我更喜欢使用间谍与存根一起,积极主张的东西已经被调用。 我们使用伯恩宝石用于这一目的。 另一种方法是使用一个模拟,它隐测试,如果事情被调用(如会失败,如果它不被调用。
所以,你的类方法可能看起来是这样的(注意,这是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
有很多的存根/间谍的例子在这里 。
希望这可以帮助。
文章来源: Mocha: stubbing method with specific parameter but not for other parameters