RSpec - as_null_object?
Мне непонятно, в чем смысл as_null_object
и в каких сценариях вы его используете? Согласно документации на Relish:
Используйте метод as_null_object
для игнорирования любых сообщений, которые не являются явно заданы как заглушки или ожидания сообщений.
Не регистрироваться у меня.
Ответы
Ответ 1
Используйте нулевой объект, если вам не нравится поведение или взаимодействие с объектом, и не хотите явно скрывать все, что нужно. Вызов любого метода с любыми аргументами для нулевого объекта не приведет к NoMethodError
или ArgumentError
. См. Также запись в Википедии Нулевой шаблон объекта.
Ответ 2
RSpec Book объясняет это. Я рекомендую вам прочитать его.
... Объект as_null сообщает обманутому объекту только прослушивание сообщений, которые мы рассказываем им ожидать и игнорировать любые другие сообщения.
Итак, предположим, что один из ваших примеров имеет следующий код:
...
my_object = mock("my_object" ).as_null_object
other_thing = OtherThing.new(my_object)
my_object.should_receive(:some_method).with("string parameter value")
...
Если код инициализации для OtherThing отправляет другие сообщения (выполняет другие методы) в my_object, которые не являются "some_method", этот пример не будет их прослушивать, изолируя тест от того, что вы на самом деле хотите проверить здесь.