biarkan fungsional karena pada dasarnya Proc. Juga di-cache.
Satu gotcha saya temukan langsung dengan let ... Dalam blok Spec yang mengevaluasi perubahan.
let(:object) {FactoryGirl.create :object}
expect {
post :destroy, id: review.id
}.to change(Object, :count).by(-1)
Anda harus memastikan untuk menelepon di let
luar blok harapan Anda. yaitu Anda menelepon FactoryGirl.create
di blok let Anda. Saya biasanya melakukan ini dengan memverifikasi objek tetap ada.
object.persisted?.should eq true
Kalau tidak, ketika let
blok disebut pertama kali perubahan dalam database akan benar-benar terjadi karena kemalasan malas.
Memperbarui
Hanya menambahkan catatan. Berhati-hatilah bermain golf kode atau dalam hal ini golf rspec dengan jawaban ini.
Dalam hal ini, saya hanya perlu memanggil beberapa metode yang merespon objek. Jadi saya memanggil _.persisted?
metode _ pada objek sebagai kebenarannya. Yang saya coba lakukan adalah instantiate objek. Anda bisa menelepon kosong? atau nihil? terlalu. Intinya bukan ujian tetapi membawa objek kehidupan dengan menyebutnya.
Jadi kamu tidak bisa refactor
object.persisted?.should eq true
menjadi
object.should be_persisted
sebagai objek belum instantiated ... malas. :)
Perbarui 2
memanfaatkan let! sintaks untuk pembuatan objek instan, yang harus menghindari masalah ini sama sekali. Perhatikan bahwa itu akan mengalahkan banyak tujuan kemalasan dari let non banged.
Juga dalam beberapa kasus Anda mungkin benar-benar ingin memanfaatkan sintaks subjek alih-alih membiarkan karena dapat memberi Anda opsi tambahan.
subject(:object) {FactoryGirl.create :object}