#ruby-on-rails #rspec
#ruby-on-rails #rspec
Вопрос:
Мой метод выглядит следующим образом:
def some_method(....)
user = User.where("....").first
if !user.nil?
if ..
user.delete
elsif
user.update_attributes(...)
else
new_user = User.new(...)
new_user.save!
end
end
Как вы можете видеть, как user, так и new_user создаются внутри этого метода.
Возможно ли заглушка и макет (ожидания) для этих объектов, когда я тестирую метод?
Я пытаюсь это:
it "should ...." do
d = double("user double")
d.should_receive(:save!).once
res = User.some_method(....)
end
Но я получаю сообщение об ошибке, в котором говорится, что ожидалось 1 раз и получено 0 раз.
Я все делаю правильно? (очевидно, что нет, возможно ли это протестировать, поскольку я не могу передать эти заглушки / mocks тестируемому методу)
Ответ №1:
Вы можете сделать что-то вроде этого:
user_double = double("user")
User.should_receive(:where).and_return(user_double)
user_double.should_receive(:delete)
Комментарии:
1. Я делаю это (см. Выше) и все еще получаю ожидаемый 1 раз, полученный 0 раз сбой / ошибка. для User.should_receive(:где).once
2. Можете ли вы опубликовать фактический код, который вы используете. Ваш приведенный выше код не содержит User.should_receive(:where).