在 RSpec 中模拟一个 Set 匹配器
Mocking a Set matcher in RSpec
我有一个库,它使用以下表达式
检查对象是否是 class 的实例
ClassName === object
有没有什么方法可以编写一个 double
来模拟上面的表达式(我的 double 将替换表达式中的对象)returns true
虽然 ClassName === object
等同于 object.kind_of?(ClassName)
,但 Ruby 检查对象的 class 而不调用任何 object
的方法。这意味着 object
在这种情况下无法做任何事情来被识别为 ClassName
实例,当然除非它实际上 是 ClassName
的实例](或其子classes/包含的模块之一)。
然而,ClassName === object
仍然是一个方法调用。所以你可以做的是在ClassName
上添加===
方法:
allow(ClassName).to receive(:===).with(object).and_return(true)
以上甚至适用于:
case object
when ClassName
# ...
end
它只是调用 ClassName === object
.
我有一个库,它使用以下表达式
检查对象是否是 class 的实例ClassName === object
有没有什么方法可以编写一个 double
来模拟上面的表达式(我的 double 将替换表达式中的对象)returns true
虽然 ClassName === object
等同于 object.kind_of?(ClassName)
,但 Ruby 检查对象的 class 而不调用任何 object
的方法。这意味着 object
在这种情况下无法做任何事情来被识别为 ClassName
实例,当然除非它实际上 是 ClassName
的实例](或其子classes/包含的模块之一)。
然而,ClassName === object
仍然是一个方法调用。所以你可以做的是在ClassName
上添加===
方法:
allow(ClassName).to receive(:===).with(object).and_return(true)
以上甚至适用于:
case object
when ClassName
# ...
end
它只是调用 ClassName === object
.