是否可以使用factory_girl特征的简写块语法?
考虑一下这家工厂:
FactoryGirl.define do
factory :foo do
name "name"
# not using the block shorthand {} syntax, instead using do...end block syntax
trait :my_name do
name "Neil"
end
end
end
使用这个工厂:
create(:foo, traits: [:my_name])
但是我想使用简写块语法来表达我的特征:
FactoryGirl.define do
factory :foo do
name "name"
# using shorthand block syntax but does not work
trait :my_name {name "Neil"}
end
end
现在使用这个工厂错误了。以下是发生的事情:
create(:foo, traits: [:my_name])
语法错误,意外' {',期待keyword_end(SyntaxError)
这看起来很奇怪,因为我认为无论你在哪里使用do ... end
,都可以选择简写{}
块语法。
问题:对于factory_girl trait
方法,我的速记块语法是否有问题,这就是错误输出的原因?或者:您是否被允许使用factory_girl traits
的速记块语法?有没有办法使用work_girl traits工作的速记块语法?
答案 0 :(得分:2)
你看,trait
实际上是一个采用特征和块名称的方法。这些是方法的2个参数。当您使用do ... end
语法时,Ruby解释器可能会猜测您正在给出第二个(块)参数。但是,在第二个{ ... }
案例中,目前尚不清楚,因为您可能正在传递Hash
。
这就是为什么你需要明确表示你正在传递第二个参数,这是一个像这样的块:
trait(:my_name) { name "Neil" }