Minitest/Mocha 嵌套存根

Minitest/Mocha nested stub

我想存根一个函数,returns 另一个存根使用 Minitest 上的 Mocha。 这是代码

@instance = stub('instance') do
      stubs(:destroy).returns(true)
      stubs(:id).returns(0)
end
find_by_id = stub do 
      stubs(:find_by_id).returns(nil) #default
      stubs(:find_by_id).with(@instance.id).returns(@instance)
    end 
@user.stubs(:instances).returns(find_by_id)

当我运行带有byebug的代码时,@instance是这样定义的:

(byebug) @instance
#<Mock:instance>

然而,里面find_by_id = stub do

(byebug) @instance
nil

我阅读了 here 关于使用 mock 而不是 stub 的内容,但这也不起作用。

我不明白为什么 @instance 在 do 块 中为 nil,因为它是先前定义的。

显然正在调查中。 source

目前,我可以通过简单地使用 'instance' 而不是“@instance”来修复它。