给定一个缺少访问器方法的数据模型,
class Person
attr_reader :name # but NO attr_accessor
def initialize(name)
@name = name
end
end
FactoryBot.define do
factory :person do
name { 'Grace' }
end
end
如何使用factory_bot
构建Person
?如果我们尝试build :person
,我们会得到:
NoMethodError .. undefined method `name='
我写了一个自定义构建策略,它可以工作,但我对它不满意,因为我必须使用instance_variable_get
来访问私有库对象。
class BuildNew
def association(runner)
runner.run
end
# @param evaluation [FactoryBot::Evaluation]
def result(evaluation)
attributes = evaluation.hash
model_class = evaluation.instance_variable_get(:@attribute_assigner).send(:build_class_instance).class
model_class.new(attributes)
end
end
FactoryBot.register_strategy(:build_new, BuildNew)
1条答案
按热度按时间eqoofvh91#
看起来自定义构建策略是不必要的。使用
initialize_with
可以更简单地完成此操作。