Издевательский набор Matcher в RSpec - PullRequest
2 голосов
/ 07 января 2020

У меня есть библиотека, которая проверяет, является ли объект экземпляром класса, используя следующее выражение

ClassName === object

Есть ли способ написать double, который может смоделируйте это так, чтобы вышеприведенное выражение (где мой double заменял бы объект в выражении) возвращает true

1 Ответ

1 голос
/ 08 января 2020

Хотя 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.

...