ruby-on-rails - 使用类方法启动工厂女孩

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

有没有办法用类方法覆盖 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 的自定义方法回调 进行试验,但没有取得任何成功。

非常感谢任何帮助。

最佳答案

添加方法生成!你需要调用 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)

关于ruby-on-rails - 使用类方法启动工厂女孩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32724722/

相关文章:

jquery - 在 Rails 中发送 ajax 请求时出现 MultiJson::DecodeError

ruby - 如何处理树顶左递归

ruby-on-rails - 条件代码 if-else 的 Rspec?

ruby-on-rails - 输入字符串长于 NAMEDATALEN-1 (63) Ruby on Rails 4

ruby-on-rails - 在循环中附加到 JSON 数组

ruby-on-rails - 无法使用带有 Rails 的 axlsx 卡住标题 Pane

ruby-on-rails - 禁用下拉列表中的某些项目

javascript - Rails 4 + jQuery : PUT ajax request

ruby-on-rails - 将重复的断言封装在一个函数中

ruby-on-rails - 用于小型照片应用程序的 Rails 托管