Ruby on rails 重装工厂\女孩工厂
我希望当我在工厂中进行更改时,我可以在rails控制台中看到它们,而无需重新启动所有控制台 我发现了一些线路,并在不太了解情况下对其进行了测试,这对我来说并不清楚Ruby on rails 重装工厂\女孩工厂,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我希望当我在工厂中进行更改时,我可以在rails控制台中看到它们,而无需重新启动所有控制台 我发现了一些线路,并在不太了解情况下对其进行了测试,这对我来说并不清楚 FactoryGirl.reload 我还测试了: > FactoryGirl.factories.clear > FactoryGirl.find_definitions # also tested FactoryGirl.factories.find_definitions
FactoryGirl.reload
我还测试了:
> FactoryGirl.factories.clear
> FactoryGirl.find_definitions # also tested FactoryGirl.factories.find_definitions
# but NoMethodError is raised
=> ActiveRecord::RecordNotFound: Couldn't find Address with ID=277 Torphy Squares
您也可以使用
重新加载
重新加载控制台环境,但不重新加载工厂。使用FactoryGirl.reload
重新加载工厂定义。它(重新)从以下位置加载这些定义(请参见):
您提到的其他命令用于清除和加载定义FactoryGirl.factories.clear
清除所有加载的工厂定义,而FactoryGirl.find\u定义
从文件中重新加载所有定义
如果您使用的是rails,请确保使用factory\u girl\u rails
gem。例如,当您定义了一个factory:user
,您可以在控制台中将其与FactoryGirl.build(:user)
或FactoryGirl.create(:user)
一起使用。这将返回一个用户实例
如果这不起作用,请发布更多详细信息。我正在使用。请参阅解决问题的更改差异:
# factories/building.rb, address is a string
- address Faker::Address.street_address
+ address { Faker::Address.street_address }
# factories/user.rb, email is a string
- email Faker::Internet.email
+ email { Faker::Internet.email }
然后
FactoryGirl.reload
起作用。我通常只使用:FactoryGirl.reload
对-这是FactoryGirl的一个大问题。在第一种情况下,Faker::Address只在工厂加载时计算一次,然后再也不会计算。因此,它是一个常数。在第二种情况下,每次使用代码块时都会对其进行求值,因此每次使用时代码块都会发生变化。第二种情况几乎总是你想要的,第一种情况只是一堆暴露的锋利的旋转刀片躺在那里等着伤害别人。这个答案也节省了我很多时间。为我服务的不是RTFM(请参阅《入门指南》中的动态属性)。重新加载!不起作用。什么意思?它会给工厂重新加载?例如,它是否将序列设置回平方1?def self.reload reset\u configuration register\u default\u strategies register\u default\u callbacks find\u definitions end
# factories/building.rb, address is a string
- address Faker::Address.street_address
+ address { Faker::Address.street_address }
# factories/user.rb, email is a string
- email Faker::Internet.email
+ email { Faker::Internet.email }