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", этот пример не будет их прослушивать, изолируя тест от того, что вы на самом деле хотите проверить здесь.