我想让一个类的实例方法返回 self,并与另一个类实例 self 一起初始化。
但是,我正在努力了解如何简洁地说明这一点:
::Api.should_receive(:new).once do |arg|
arg.should be_an_instance_of(::Cli)
end
运行此规范时,这可确保在 true 而不是 Api 实例上调用 next 方法,正如预期的那样,即块的返回值。例子:
class Cli
def eg
api = Api.new(self)
api.blowup # undefined method for true
end
end
我真的很希望该块返回 Api 实例自身而不Api.new(...)
在规范中调用另一个调用,下面的示例就是这样做的,在我看来,非 rspec 读者会想知道为什么规范在明显Api.new(...)
被多次调用时会通过.
谁能建议如何最好地做到这一点?
当前解决方案:
这读起来像::Api.new(...)
被称为三次:一次创建api
,一次创建cli
,一次创建start
。然而,一个电话的规格通过了。我理解为什么并且这是正确的,所以不是错误。但是,我想要一个不熟悉 rspec 的读者可以扫描并且不会有Api.new
被多次调用的印象的规范。另请注意,...once.and_return(api){...}
不起作用,该块需要返回api
才能通过。
let(:cli){ ::Cli.start(['install']) }
let(:start){ ::Cli.start(['install']) }
it 'is the API' do
api = ::Api.new(cli)
::Api.should_receive(:new).once do |arg|
arg.should be_an_instance_of(::Cli)
api
end
start
end