说我有一个称为存储值的类,它存储值数组:
class Storage
attr_accessor :values
def initialize(*vals)
@values = vals
end
end
并为此类设置了工厂
FactoryBot.define do
factory :storage do
values { [1, 2, 3] }
end
end
如何添加一种方便的方法来编辑值?
我希望能够在现有工厂上调用名为#use_values的方法来对其进行更新,例如:
factory = FactoryBot.build(:storage)
factory.values #=> [1, 2, 3]
factory.use_values(4, 5, 6)
factory.values #=> [4, 5, 6]
我希望语法看起来像这样(尽管这不起作用):
FactoryBot.define do
factory :storage do
values { [1, 2, 3] }
def use_values(*vals)
self.values = vals
end
end
end
我该怎么做?
我认为这应该很容易做到,但是我似乎找不到任何好的资源。
注意
我知道我可以在初始版本中使用选项来指定#values返回值,如下所示:
FactoryBot.build(:storage, values: [4, 5, 6])
这不是我想要的。我想要一种方法来调用已经存在的工厂中的方法来更新它,而不是使用特定值来建立工厂。
答案 0 :(得分:2)
您已经可以定义values
属性的值,无论何时何地,无论使用什么gem,只要在Storage类的实例中就可以,因为您已经定义了values
的属性访问器。
require 'factory_bot'
class Storage
attr_accessor :values
def initialize(*values)
@values = values
end
end
FactoryBot.define do
factory :storage do
values { [1, 2, 3] }
end
end
storage_instance = FactoryBot.build(:storage)
p storage_instance.values # [1, 2, 3]
storage_instance.values = [4, 5, 6]
p storage_instance.values # [4, 5, 6]
在类上添加属性访问器,传递符号,使您能够在属性上命名属性,为其创建实例变量,以及用于设置和获取其值的读写方法({{1 }},:values=
方法)。
因此,添加:values
只是设置values属性的另一种方式。