Rails Test & Mocha: Как заглушить конкретную модель - условно any_instance? - PullRequest
4 голосов
/ 21 октября 2009

Я хочу заглушить только конкретную модель, но не только конкретный объект и не каждый экземпляр

например. Данный класс «Person» с атрибутами «name» (строка) и «cool» (логическое значение). У нас есть две модели:

person_bill:
   name: bill
   cool: false

person_steve:
   name: steve
   cool: false

Теперь я хочу заглушить просто Стива, который работает хорошо:

p1 = people(:person_steve)
p1.stubs(:cool? => true)
assert p1.cool? #works

Но если я снова загружаю модель из БД, это не так:

p1 = people(:person_steve)
p1.stubs(:cool? => true)
p1 = Person.find_by_name p1.name
assert p1.cool? #fails!!

Это работает, но влияет и на Билл , что не должно:

 Person.any_instance.stubs(:cool? => true)
 assert people(:person_bill).cool? #doesn't fails although it should

Так как я могу просто заглушить Стива, но в любом случае? Существует ли условный экземпляр any_instance, например

 Person.any_instance { |p| p.name == 'Steve' }.stubs(:cool? => true)

Заранее спасибо!

1 Ответ

7 голосов
/ 22 октября 2009

Почему бы просто не заглушить метод, генерирующий объект?

Person.stubs( :find_by_name ).
       returns( stub(:cool? => true) )

Я думаю, что это правильный (и простой) ответ.Я почти уверен, что нет ничего похожего на ваш синтаксис any_instance.Вы можете найти что-то полезное в синтаксисе последовательности:

Не могли бы вы привести еще один пример того, что вы ищете?Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...