Хотя ClassName === object
эквивалентно object.kind_of?(ClassName)
, Ruby проверяет класс объекта, не вызывая ни одного из object
методов. Это означает, что object
не может ничего сделать в этой ситуации, чтобы быть распознанным как экземпляр ClassName
, если, конечно, он на самом деле не является экземпляром ClassName
(или одним из его подклассов / включенных модулей ).
Тем не менее, ClassName === object
, тем не менее, является вызовом метода. Итак, что вы можете сделать - это поставить метод ===
на ClassName
:
allow(ClassName).to receive(:===).with(object).and_return(true)
Вышеописанное работает даже для:
case object
when ClassName
# ...
end
, которое просто вызывает ClassName === object
.