用类方法启动工厂女孩

时间:2015-09-22 18:54:27

标签: ruby-on-rails ruby ruby-on-rails-4 rspec factory-bot

有没有办法用类方法覆盖FactoryGirl的:create:build方法?

例如,假设我有一个Key课程,并希望创建一个工厂,并且' 生成'一些用于我的测试..

模型/ key.rb

class Key
    def self.generate!(attrs = {})
       # do some stuff
       create!(attrs.merge(encryption_key: key))
    end
end

规格/工厂/ keys.rb

FactoryGirl.define do
    factory :key do
        primary false
    end
end

而不是FactoryGirl.create(:key) - 我希望按照FactoryGirl.generate!(:key)的方式做点什么。我尝试过使用FactoryGirl的自定义方法回调,但没有取得任何成功。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

添加方法生成!你需要调用FactoryGirl.register_strategy

FactoryGirl.register_strategy :generate! , Generate

添加类似Generate的类

class Generate 
 def association(runner)
    runner.run
  end

  def result(evaluation)
    evaluation.object.tap do |instance|
      instance.encryption_key = 'xxxx' if instance.has_attribute?(:encryption_key)
      evaluation.create(instance)
    end
  end
end

然后你可以定义

FactoryGirl.define do
 factory :key do
    primary false
 end
end

并致电

FactoryGirl.generate!(:key)