ruby-on-rails - Rspec/FactoryBot 读取我之前的 schema.db 文件
问题描述
在最近的更改中,我将列 first_name 和 last_name 合并为一个 full_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 如何仍然能够加载我的旧版本架构以及如何解决此问题?
注意我使用了rails db:drop db:create db:migrate但它没有修复它。
解决方案
用于rails db:test:prepare
将测试数据库架构设置为等于您的 schema.rb 文件。
您可能在开发时回滚了迁移并在更改后重新运行它,但在测试时它使用旧代码运行并且不再运行,因为它已经运行过一次。
迁移测试数据库是您不需要做的事情。只需使用rails db:test:prepare
.
推荐阅读
- shopify - 如何将 bootstrap 3 和 jQuery 添加到 slate
- node.js - Firebase 函数:无法读取未定义的属性“post_id”
- c# - 使用 BrokeredMessage 从 Azure 服务总线队列 (v1) 反序列化强类型对象
- javascript - 通过javascript在div中添加元素的问题
- visual-studio-code - 禁用 VSCode 自动更新但允许其他用户设置
- javascript - 如何在我的支付网关结帐过程中结帐时分配商店的订单价值(金额)?
- c# - 自定义编辑器模板未呈现/触发
- c++ - 多核虚假共享
- javascript - 在javascript中显示日期和时间的代码每天下午5点迭代到第二天
- spring - 消费者线程错误,SimpleMessageListenerContainer 上的线程中止