【问题标题】:Initiate a Factory Girl with a Class Method用班级方法启动工厂女孩
【发布时间】:2015-09-22 18:54:26
【问题描述】:

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

例如,假设我有一个Key 类并想创建一个工厂并为我的测试“生成”一些..

models/key.rb

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

spec/factories/keys.rb

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

而不是FactoryGirl.create(:key) - 我想做一些类似于FactoryGirl.generate!(:key) 的事情。我尝试过使用 FactoryGirl 的 自定义方法回调,但没有任何成功。

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

    FactoryGirl.register_strategy :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)
    

    【讨论】:

    • 这很棒!我对有关此的文档感到有些困惑,并滚动通过了。我不知道这正是所需要的。谢谢 Abdoo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多