从 FactoryGirl 更新到 factoryBot 导致 NoMethodError
Updating from FactoryGirl to factoryBot results in NoMethodError
我尝试从 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 代码。但是不知为何不识别工厂结构
注意:
- 我做了一个包 install/update
就像人们在评论中所说的那样,像 first_name 'John'
这样的静态属性在 v4 上已被弃用(检查 this guide),然后在 v5 上被删除,另一种方法是让它们像动态属性一样:first_name { 'John' }
.
他们甚至包括一个 Rubocop 来帮助您修复所有工厂:
rubocop \
--require rubocop-rspec \
--only FactoryBot/AttributeDefinedStatically \
--auto-correct
我的建议是缓慢但稳妥地迁移,使用类似的版本从 FactoryGirl
迁移到 FactoryBot
,运行 你的规格,检查所有弃用警告,运行 自定义 Rubocop 自动更正您的工厂,然后仅在阅读 changelog.
后迁移主要版本
我同意这个消息可能会好一点,通常弃用的主要目标是简化代码和减少分支逻辑,所以一旦弃用警告存在足够长的时间并且是时候删除它,任何检测旧用法的一部分是必须删除的额外代码,这在开源项目中很常见。
很高兴你找到了出路。
我尝试从 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 代码。但是不知为何不识别工厂结构
注意: - 我做了一个包 install/update
就像人们在评论中所说的那样,像 first_name 'John'
这样的静态属性在 v4 上已被弃用(检查 this guide),然后在 v5 上被删除,另一种方法是让它们像动态属性一样:first_name { 'John' }
.
他们甚至包括一个 Rubocop 来帮助您修复所有工厂:
rubocop \
--require rubocop-rspec \
--only FactoryBot/AttributeDefinedStatically \
--auto-correct
我的建议是缓慢但稳妥地迁移,使用类似的版本从 FactoryGirl
迁移到 FactoryBot
,运行 你的规格,检查所有弃用警告,运行 自定义 Rubocop 自动更正您的工厂,然后仅在阅读 changelog.
我同意这个消息可能会好一点,通常弃用的主要目标是简化代码和减少分支逻辑,所以一旦弃用警告存在足够长的时间并且是时候删除它,任何检测旧用法的一部分是必须删除的额外代码,这在开源项目中很常见。
很高兴你找到了出路。