【问题标题】:Shorthand block syntax for factory_girl traitsfactory_girl 特征的速记块语法
【发布时间】:2016-06-22 14:48:24
【问题描述】:

factory_girl trait 是否可以使用简写块语法?

考虑这个工厂:

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 的速记块语法吗?有没有办法使用 factory_girl 特征的速记块语法?

Docs on the factory_girl trait attribute

【问题讨论】:

    标签: ruby-on-rails ruby factory-bot


    【解决方案1】:

    你看,trait 实际上是一个接受特征名称和块的方法。这些是方法的 2 个参数。当您使用do ... end 语法时,Ruby 解释器可能会猜测您正在提供第二个(块)参数。但是,在第二个{ ... } 的情况下,不清楚,因为您可能传递了Hash

    这就是为什么您需要明确说明您正在传递第二个参数,它是这样的块:

    trait(:my_name) { name "Neil" }
    

    【讨论】:

    • 哇哦!很好,谢谢!看来我需要更多地研究积木。欣赏!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多