【发布时间】: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