Pengenalan Factory Girl menjelaskan perbedaan antara FactoryGirl.build()
dan FactoryGirl.create()
:
# Returns a User instance that's not saved
user = FactoryGirl.build(:user)
# Returns a saved User instance
user = FactoryGirl.create(:user)
Saya masih belum memahami perbedaan praktis antara keduanya. Dapatkah seseorang memberikan contoh di mana Anda ingin menggunakan yang satu dan bukan yang lain? Terima kasih!
sumber
create
denganbuild
, dan membatalkannya jika pengujian gagal?#create
membaca dan mengembalikan objek yang ada dari disk, atau mengembalikan objek yang ada di memori setelah menyimpannya? Dengan kata lain, apakah melakukancreate(...)
setara dengancreate(...).reload
?Penggunaan
FactoryGirl.build(:factory_name)
tidak bertahan pada db dan tidak memanggilsave!
, jadi validasi Rekaman Aktif Anda tidak akan berjalan. Ini jauh lebih cepat, tetapi validasi mungkin penting.Penggunaan
FactoryGirl.create(:factory_name)
akan tetap ada di db dan akan memanggil validasi Rekaman Aktif. Ini jelas lebih lambat tetapi dapat menangkap kesalahan validasi (jika Anda peduli tentang mereka dalam pengujian Anda).sumber
FactoryGirl.create()
akan membuat objek dan asosiasi baru (jika pabrik memilikinya) untuk itu. Semuanya akan disimpan dalam database. Selain itu, ini akan memicu validasi model dan database. Panggilan balikafter(:build)
danafter(:create)
akan dipanggil setelah pabrik disimpan. Jugabefore(:create)
akan dipanggil sebelum pabrik disimpan.FactoryGirl.build()
tidak akan menyimpan objek, tetapi masih akan membuat permintaan ke database jika pabrik memiliki asosiasi. Ini akan memicu validasi hanya untuk objek terkait. Callbackafter(:build)
akan dipanggil setelah pabrik dibangun.Perhatikan bahwa dalam kebanyakan kasus, model pengujian paling baik digunakan
build_stubbed
untuk kinerja yang lebih baik. Baca lebih lanjut di sini .sumber