我在Rspec测试中偶然发现了以下一段代码,我必须说我或多或少知道它的作用,但我无法找到相关的来源来证明它。请指出我描述的宝石或文档:
describe SomeModule::Salesforce::Lead do
before do
SomeModule::Salesforce::Lead.any_instance.expects(:materialize)
end
...
end
似乎对于:此规范中的每个示例,它都会在上述类的任何实例上设置期望以接收对:materialize方法的调用 AND 它实际上重新定义 什么都不做的方法。最后一部分看起来很重要,因为它避免了在测试环境中连接到SalesForce,但我无法找到确认。
答案 0 :(得分:1)
any_instance
记录在Working with Legacy code
你是正确的,它既设置了期望,又在任何给定的类实例上存根原始方法。
以前版本的RSpec通过monkeypatch实现这一目标的ruby核心类(Object
和BaseObject
)
RSpec 3有一种新的语法,它不依赖于monkeypatching:
before do
expect_any_instance_of(SomeModule::Salesforce).to receive(:materialize)
end
答案 1 :(得分:0)
好的我刚刚发现我查找的是错误的来源,它不是来自RSpec,而是来自Mocha Mock(期望和any_instance)http://gofreerange.com/mocha/docs/Mocha/Mock.html#expects-instance_method 谢谢@ tomasz-pajor @ https://stackoverflow.com/users/2928259/tomasz-pajor