Можете ли вы написать заглушки / mocks / doubles для методов внутри вызова метода? - PullRequest
0 голосов
/ 14 июня 2011

Мой метод выглядит так:

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 раз.

Я правильно делаю? (очевидно нет, возможно ли это проверить, так как я не могу передать эти заглушки / макеты тестируемому методу)

1 Ответ

0 голосов
/ 14 июня 2011

Вы можете сделать что-то вроде этого:

user_double = double("user")
User.should_receive(:where).and_return(user_double)
user_double.should_receive(:delete)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...