Saya mencoba mengisi beberapa data palsu ke pabrik menggunakan permata Faker:
Factory.define :user do |user|
user.first_name Faker::Name::first_name
user.last_name Faker::Name::last_name
user.sequence(:email) {|n| "user#{n}@blow.com" }
end
Namun sementara saya berharap ini menghasilkan pengguna yang memiliki first_name dan last_names yang berbeda, masing-masing sama:
>> Factory(:user)
=> #<User id: 16, email: "[email protected]", created_at: "2011-03-18 18:29:33",
updated_at: "2011-03-18 18:29:33", first_name: "Bailey", last_name: "Durgan">
>> Factory(:user)
=> #<User id: 17, email: "[email protected]", created_at: "2011-03-18 18:29:39",
updated_at: "2011-03-18 18:29:39", first_name: "Bailey", last_name: "Durgan">
Bagaimana saya bisa mendapatkan permata Faker untuk membuat nama baru untuk setiap pengguna dan tidak hanya menggunakan kembali yang asli?
ruby-on-rails
factory-bot
Peter Nixey
sumber
sumber
user.sequence(:first_name} {|n| Faker::Name::first_name}
? FactoryGirl kemungkinan hanya mengevaluasi panggilan Faker Anda saat memuat "perlengkapan" Anda. Menggunakansequence param,&block
metode ini seharusnya mencegah hal itu.Jawaban:
Factory.define :user do |user| user.first_name { Faker::Name::first_name } user.last_name { Faker::Name::last_name } user.sequence(:email) {|n| "user#{n}@blow.com" } end
Coba letakkan tanda kurung di sekitar penipu. lihat tautan ini
sumber
Perhatikan bahwa Faker mungkin masih memberikan data duplikat karena terbatasnya jumlah data palsu yang tersedia.
Untuk tujuan pengujian sederhana dan untuk mendapatkan validasi keunikan, saya telah menggunakan yang berikut ini:
sequence(:first_name) {|n| Faker::Name::first_name + " (#{n})"} sequence(:last_name) {|n| Faker::Name::last_name + " (#{n})"}
sumber
Demi menjaga jawaban yang benar, ini dia translokasi dari blog, saya tidak menghargai jawabannya.
Factory.define :user do |u| u.first_name Faker::Name.first_name u.last_name Faker::Name.last_name end
Factory.define :user do |u| u.first_name { Faker::Name.first_name } u.last_name { Faker::Name.last_name } end
Untuk menjelaskan alasannya, contoh pertama menghasilkan nama yang sama. Ini hanya mengevaluasi sekali. Contoh kedua mengevaluasi setiap kali pabrik digunakan.
Ini karena
{}
pemberian evaluasi malas. Pada dasarnya mereka menyediakan proc / lambda dengan panggilan Faker sebagai nilai kembalian mereka.sumber
Alternatif (kurang efisien) untuk menggunakan urutan ketika Anda memiliki validasi keunikan pada atribut adalah dengan memeriksa apakah nilai yang diusulkan sudah ada dan terus mencoba yang baru sampai unik:
FactoryGirl.define do factory :company do name do loop do possible_name = Faker::Company.name break possible_name unless Company.exists?(name: possible_name) end end end end
sumber