我正在尝试创建一个返回存根类的lambda。这就是我所拥有的:
engine_stub = lambda { |valid|
Class.new {
def valid?(address)
valid
end
}
}
lambda应该返回一个类,其valid?
实例方法总是返回传递给lambda的值。此代码失败并显示错误:
NameError: undefined local variable or method `valid' for #<#<Class:0x007f4bf0ebd
0f0>:0x007f4bf0ebcd08>
很明显,该方法无法访问lambda范围。我也试过这个:
engine_stub = lambda { |valid|
stub_class = Class.new
def stub_class.valid?(address)
valid
end
return stub_class
}
反而导致此错误:
NoMethodError: undefined method `valid?' for #<#<Class:0x007fecbada1138>:0x007fec
bada0df0>
所以现在我没有使valid?
成为实例变量。
我正在尝试让lambda engine_stub
返回一个带有一个实例方法valid?
的类,该方法返回传递给lambda的值。我该怎么做?
答案 0 :(得分:6)
关键字def
是范围门,因此您应该通过define_method{}
engine_stub = -> valid do
Class.new { define_method :valid? do valid end }
end
答案 1 :(得分:0)
我怀疑你需要这个存根来进行测试。在rspec的情况下,您可能应该创建存根而不是类,或者如果您的代码确实需要提供类:
engine_stub = stub_chain(:new, :valid?, valid)