нехай функціональний, як по суті, Proc. Також її кешування.
Один готч я знайшов одразу з дозволеним ... У блоці Spec, який оцінює зміни.
let(:object) {FactoryGirl.create :object}
expect {
post :destroy, id: review.id
}.to change(Object, :count).by(-1)
Вам потрібно буде обов'язково зателефонувати let
за межами очікуваного блоку. тобто ви телефонуєте FactoryGirl.create
у своєму блоці дозволу. Зазвичай я це роблю, перевіряючи, чи зберігається об'єкт.
object.persisted?.should eq true
Інакше при let
першому виклику блоку зміни бази даних насправді відбудуться через ледачу інстанцію.
Оновлення
Просто додавання примітки. Будьте обережні, граючи в гольф-код або в цьому випадку rspec golf з цією відповіддю.
У цьому випадку я просто повинен викликати якийсь метод, на який об’єкт відповідає. Тому я закликаю _.persisted?
метод _ на об'єкт як його правду. Все, що я намагаюся зробити, це інстанціювати об'єкт. Ви могли б зателефонувати порожнім? чи нуль? теж. Суть не в тесті, а в тому, щоб повернути об'єкт до життя, зателефонувавши йому.
Таким чином, ви не можете рефактор
object.persisted?.should eq true
бути
object.should be_persisted
як об'єкт не був примірник ... його ледачий. :)
Оновлення 2
використовувати лей! синтаксис для миттєвого створення об'єкта, що має взагалі уникати цього питання. Зауважте, хоча це переможе чимало мети лінощі незворушеного хай.
Також у деяких випадках ви, можливо, хочете використовувати синтаксис теми, а не дозволяти, оскільки це може дати вам додаткові можливості.
subject(:object) {FactoryGirl.create :object}