#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
помощью .