Rspec / FactoryBot считывает мой предыдущий файл schema.db

#ruby-on-rails #rspec #factory-bot #ruby-on-rails-6

#ruby-on-rails #rspec #завод-бот #ruby-on-rails-6

Вопрос:

В недавних изменениях я объединил столбцы first_name и last_name в одно полное имя. Я выполнил миграцию, и в моем schema.rb все обновлено. Моя фабрика пользователей теперь выглядит так:

 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
 

Однако, когда я пытаюсь запустить свой rspec, я получаю повторную ошибку:

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

Более того, запуск RAILS_ENV=test rake db:migrate каким-то образом перезаписывает мой schema.db в предыдущее состояние, где first_name и last_name все еще существовали вместо full_name. Эти столбцы больше не существуют в моих файлах миграции!

Как FactoryBot / rspec все еще может загружать мою старую версию schema и как исправить эту проблему?

Обратите внимание, что я использовал rails db: drop db:create db: migrate, но это не исправило проблему.

Ответ №1:

Используйте rails db:test:prepare , чтобы установить тестовую схему db равной вашему файлу schema.rb.

Вероятно, вы откатили миграцию при разработке и повторно запустили ее после изменения, но при тестировании она выполнялась со старым кодом и больше не запускалась, поскольку уже выполнялась один раз.

Перенос тестовой базы данных — это то, что вам не нужно делать. Просто установите схему с rails db:test:prepare помощью .