【问题标题】:Factory Girl with legacy read only database具有旧版只读数据库的 Factory Girl
【发布时间】:2015-07-24 19:06:39
【问题描述】:

我正在为链接到只读旧数据库的应用程序设置测试。

我有 2 个模型 ProductSpecification 和 Stock。 Stock 模型正在访问旧数据库上的只读数据。

class ProductSpecification < ActiveRecord::Base
  belongs_to :stock
  validates :stock_id, uniqueness: true, presence: true

  def stock_name
    stock.name
  end
end

class Stock < ActiveRecord::Base
  def readonly?
    @readonly = true
  end
end

我需要使用股票名称设置工厂,但在 ProductSpecification 中添加 stock_name writer 方法违反了 Stock 是只读的事实。

为了解决这个问题,我对工厂文件中的 ProductSpecification 进行了猴子修补。

class ProductSpecification < ActiveRecord::Base
  def stock_name= name
    # the stock table is read only to a legacy database
    # this monkey patch allows a stock name to be set without adding stock
  end
end

FactoryGirl.define do
  factory :product_specification do
    sequence(:stock_id)
    sequence(:stock_name){ |n| "Stock Name #{n}" }
  end
end

这允许我为测试设置一个 stock_name 。

这里有更好的做法吗? 有没有我没有考虑过的猴子补丁的替代解决方案?

【问题讨论】:

    标签: ruby-on-rails testing factory-bot legacy monkeypatching


    【解决方案1】:

    我会在模型中尝试attr_readonly :important_type_thingie

    【讨论】:

    • 感谢您的建议。我认为这仅在 :important_type_thingie 是模型数据库中的列时才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多