У моєму випадку я зворотний дзвінок завантажує щось у мій кеш redis. Але тоді я не мав / хотів, щоб екземпляр redis працював для мого тестового середовища.
after_create :load_to_cache
def load_to_cache
Redis.load_to_cache
end
У моїй ситуації, подібній до вище, я просто заробив свій load_to_cache
метод у своєму spec_helper:
Redis.stub(:load_to_cache)
Крім того, у певній ситуації, коли я хочу перевірити це, мені просто доведеться відкрутити їх у попередньому блоці відповідних тестів Rspec.
Я знаю, що у вас може статися щось складніше, after_create
або ви не можете вважати це дуже елегантним. Ви можете спробувати скасувати зворотний виклик, визначений у вашій моделі, визначивши after_create
гачок у вашій Фабриці (див. Документи «factory_girl»), де ви, ймовірно, можете визначити той самий зворотний виклик і повернення false
відповідно до розділу «Скасування зворотних викликів» цієї статті . (Я не впевнений у тому, в якому порядку виконується зворотний виклик, тому я не пішов на цю опцію).
Нарешті, (вибачте, що я не в змозі знайти статтю) Ruby дозволяє використовувати деякі брудні метапрограмування, щоб зняти гак зворотного дзвінка (вам доведеться скинути його). Я думаю, це був би найменш бажаний варіант.
Ну є ще одна річ, насправді не рішення, але подивіться, чи зможете ви піти з Factory.build у своїх специфікаціях, а не створити об'єкт. (Буде найпростішим, якщо зможете).
:on => :create
перевірку, використовуйтеafter(:build) { |user| user.class.skip_callback(:validate, :create, :after, :run_something) }