在简单代码中使用Mocha
以意想不到的方式转换。你能解释一下出了什么问题吗?
require 'test-unit'
require 'mocha'
class A
def m
caller.first
end
end
因此,使用这个简单的类,我们可以得到最新的调用者:
A.new.m #=> "(irb):32:in `irb_binding'" (for example)
但是,如果我想要发送caller
电话,那就会出错。
a = A.new
a.stubs(:caller)
Mocha::ExpectationError: unexpected invocation: #<A:0x6aac20>.caller()
我的猜测是查看Mocha
来源,但我稍后会这样做;)
答案 0 :(得分:1)
这是部分解释,但我希望它仍然有用。
正如您所建议的,了解这里发生的事情的方法是检查Mocha来源。我认为问题的关键在于Expectation
类,它在创建存根时使用makes use of the caller
method itself。
解决方法是使用alias_method
例如
class A
alias_method :my_caller, :caller # allow caller to be stubbed
def m
my_caller.first
end
end
a = A.new
a.stubs(:my_caller)
答案 1 :(得分:0)
您正在caller
致电m
。因此caller.first
始终是调用m
的行,这可能是无用的。可能你想要的是caller[1]
,而不是caller.first
(或caller[0]
)。