【问题标题】:Machinist for Non-ActiveRecord Models非 ActiveRecord 模型的机械师
【发布时间】:2010-08-09 16:06:32
【问题描述】:

是否可以使用 Machinist 为非活动记录模型创建蓝图?无论我尝试什么,似乎都会产生错误!

如果这对机械师来说是不可能的,是否有另一个可以生成夹具的 gem 来做到这一点?我还读到工厂女孩对此有意见。

【问题讨论】:

  • 如果您生成最简单的示例来重现该问题,这可能会有所帮助。另外,“非活动记录模型”是什么意思?使用 ActiveModel 的东西,还是使用普通旧 Ruby 对象的东西?
  • 我只是指一个不绑定到 ActiveRecord/ActiveModel 的模型,但是是的,你真的可以说我正在寻找一种方法来将机械师蓝图用于任何常规 Ruby 类.我知道我总是可以使用 OpenStruct 创建自己的工厂方法来执行此操作,但我真的很喜欢 Machinist 的语法,如果我可以将所有内容都放在 Machinist 的 blueprint.rb 文件下就好了。

标签: ruby-on-rails ruby unit-testing mocking machinist


【解决方案1】:

我对 Machinist 2 beta 1 做了一些调查,看起来它支持普通的 ruby​​ 对象。这是我为使其正常工作所做的工作。很高兴了解任何更简单的解决方案。

require 'rubygems'
require 'machinist'
require 'faker'

class YourObject
 attr_accessor :field1, :field2
end


# For all Objects
class Object
 extend Machinist::Machinable

 def self.blueprint_class
   Machinist::Blueprint
 end
end   

# Or just one object
YourObject.send(:extend, Machinist::Machinable)
YourObject.class_eval do
 def self.blueprint_class
   Machinist::Blueprint
 end
end



YourObject.blueprint do
 field1 { rand(1000) }
 field2 { Faker::Name }
end

obj = YourObject.make

【讨论】:

    【解决方案2】:

    如果有人好奇,FactoryGirl 和 PORO 的问题之一(可能还有其他问题)是它不处理带参数的构造函数。您可以根据here的答案进行到期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多