重新加载factory_girl工厂

时间:2012-09-06 19:31:43

标签: ruby-on-rails factory-bot

我希望当我在工厂中进行更改时,我会在rails控制台中看到它们而不重新启动所有控制台。

我找到了一些线条,并对所发生的事情了解不多,documentation对我来说并不清楚。

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

2 个答案:

答案 0 :(得分:16)

您也可以使用reload!重新加载控制台环境,但不会重新加载工厂。使用FactoryGirl.reload重新加载Factory定义。它(重新)从以下位置加载这些定义(参见documentation):

test/factories.rb
spec/factories.rb
test/factories/*.rb
spec/factories/*.rb

您提到的其他命令用于清除和加载定义。 FactoryGirl.factories.clear清除所有已加载的Factory定义,而FactoryGirl.find_definitions重新加载文件中的所有定义。

如果您的on Rails,请务必使用factory_girl_rails gem。例如,当您定义factory :user时,可以在控制台中使用FactoryGirl.build(:user)FactoryGirl.create(:user)。这将返回用户实例。

如果不起作用,请发布更多详情。

答案 1 :(得分:8)

我正在使用Faker。查看解决问题的变化差异:

# 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有效。