1) rspec не может знать, какой тип объекта должен возвращать метод, однако вы должны сказать это ...
2) Есть кое-что, на что вы можете посмотреть. Вместо того, чтобы использовать заглушку, попробуйте использовать макет вместо тестового двойника. По сути, это то же самое, что и заглушка, но вы можете выполнить еще много проверок ( см. Документацию здесь ). Такие вещи, как, сколько раз был вызван конкретный метод, с какими аргументами он должен быть вызван, и каким должно быть возвращаемое значение. Ваш тест не пройдёт, если ни одна из этих проверок не пройдёт.
3) Лучшей практикой будет само имя метода. Например, методы, заканчивающиеся на? как object.exists? всегда должен возвращать логическое значение. В вашем случае я бы предложил рефакторинг вашего метода, возможно, разделил бы его на две части, одну для обновления и одну для создания, и предложите другой метод, чтобы сообщить вам, существует объект или нет. Не рекомендуется, чтобы метод вел себя двумя различными способами в зависимости от ввода (см. разделение интересов )
Удачи! надеюсь, это поможет.