Мокко: Как вы устанавливаете ожидание для метода экземпляра? - PullRequest
4 голосов
/ 27 мая 2009

Предположим, этот код рубина:

class User
  def self.failed_login!(email)
    user = User.find_by_email(email)
    if user
      user.failed_login_count = user.failed_login_count + 1
      user.save
    end
  end
end

Я хочу написать тест, который проверяет, что user.save никогда не вызывается, когда дается неправильный адрес электронной почты. E.g.:

it "should not increment failed login count" do
   User.expects(:save).never()
   User.failed_login!("doesnotexist")
end

Этот тест в настоящее время проходит, но он также проходит, когда я предоставляю действительный адрес электронной почты.

Как мне настроить ожидание с помощью Мокко? (или любой другой фальшивый фреймворк) таким образом, чтобы он проверял метод сохранения любого пользовательского экземпляра, никогда не вызывается?

(желательно без заглушки / насмешек над методом find_by_email, поскольку реализация того, как получить пользователя, может измениться в будущем)

Приветствия

Ответы [ 2 ]

18 голосов
/ 27 мая 2009

Для других, кто мог бы наткнуться на это, я нашел ответ в другом посте, который имел дело с RR как насмешливой структурой ... в Mocha вы можете сделать это:

User.any_instance.expects(:save).never()
4 голосов
/ 28 мая 2009

в качестве альтернативы вы можете сделать что-то вроде

user = mock
User.expects(:find).returns user
user.expects(:save).never
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...