gpt4 book ai didi

ruby - 从 FactoryGirl 更新到 factoryBot 导致 NoMethodError

转载 作者:数据小太阳 更新时间:2023-10-29 07:47:24 26 4
gpt4 key购买 nike

我尝试从 FactoryGirl 转换为 FactoryBot。这应该不是一个大问题,但我没有让它工作。代码:

添加到 Gem 文件

gem 'factory_bot'

添加到 spec_helper

FactoryBot.definition_file_paths = %w(spec/factories)
FactoryBot.find_definitions

config.include FactoryBot::Syntax::Methods

工厂

FactoryBot.define do
factory :user do
first_name 'John'
last_name 'Doe'
birthdate { 21.years.ago }
admin false
end
end

当我尝试运行 rspec 测试时,出现以下错误:

NoMethodError: undefined method 'first_name' in 'user' factory!
Method_missing at C:/jruby-9.1.17.0/lib/ruby/gems/shared/gems/factory_bot-5.0.2/lib/factory_bot/definition_proxy.rb:97
block in (root) at <path to factory>

在我看来,gem 已正确加载到项目中,factoryBot 代码已执行。但是由于某种原因它不识别工厂的结构。

注意:- 我做了捆绑安装/更新

最佳答案

就像人们在评论中所说的那样,像 first_name 'John' 这样的静态属性在 v4 上已被弃用(检查 this guide ),然后在 v5 上被删除,另一种方法是让它们像动态属性一样: first_name { 'John' }

他们甚至包括一个 Rubocop 来帮助您修复所有工厂:

rubocop \
--require rubocop-rspec \
--only FactoryBot/AttributeDefinedStatically \
--auto-correct

我的建议是缓慢但稳妥地迁移,从 FactoryGirlFactoryBot 使用类似的版本,运行您的规范,检查所有弃用警告,运行自定义 Rubocop自动更正您的工厂,然后仅在阅读 changelog 后迁移主要版本.

我同意这个消息可能会好一点,通常弃用的主要目标是简化代码和减少分支逻辑,所以一旦弃用警告存在足够长的时间并且是时候删除它,任何检测旧用法是必须删除的额外代码,这在开源项目中很常见。

很高兴你找到了出路。

关于ruby - 从 FactoryGirl 更新到 factoryBot 导致 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com