Dalam perubahan terbaru saya telah menggabungkan kolom first_name dan last_name menjadi satu full_name. Saya melakukan migrasi dan di schema.rb saya semuanya mutakhir. Pabrik Pengguna saya sekarang terlihat seperti ini:

FactoryBot.define do
  password = Faker::Internet.password

  factory :user do
    email { Faker::Internet.email }
    full_name { Faker::Name.name }
    password { password }
    password_confirmation { password }
    owner { 1 }
    registration_step { :finished }
    confirmed_at { Time.current }
  end
end

Namun ketika saya mencoba menjalankan rspec saya, saya mendapatkan kesalahan berulang:

  Failure/Error: let(:user) { create :user }
  
  NoMethodError:
    undefined method `full_name=' for #<User:0x00007ff5e597e310>

Selain itu menjalankan RAILS_ENV=test rake db:migrate entah bagaimana menulis ulang schema.db saya ke keadaan sebelumnya di mana first_name dan last_name masih ada alih-alih full_name. Kolom itu tidak ada lagi di file migrasi saya!

Bagaimana FactoryBot/rspec masih dapat memuat skema versi lama saya dan bagaimana cara memperbaiki masalah ini?

Catatan Saya menggunakan rails db:drop db:create db:migrate tetapi tidak memperbaikinya.

0
andrzej541 20 November 2020, 17:28

1 menjawab

Jawaban Terbaik

Gunakan rails db:test:prepare untuk menyetel skema test db sama dengan file schema.rb Anda.

Anda mungkin membatalkan migrasi pada pengembangan dan menjalankannya kembali setelah mengubahnya, tetapi pada pengujian itu berjalan dengan kode lama dan tidak berjalan lagi karena sudah dilakukan sekali.

Migrasi database pengujian adalah sesuatu yang tidak perlu Anda lakukan. Cukup atur skema dengan rails db:test:prepare.

1
Siim Liiser 20 November 2020, 15:50