在使用 factory girl gem 时,我们创建了一个 factory.rb 文件,其语法为
FactoryGirl.define do
factory :model do
...
end
...
end
那么 FactoryGirl.define 语法到底是什么意思呢?是否类似于
class FactoryGirl
def factory :model do
end
end
谢谢
在使用 factory girl gem 时,我们创建了一个 factory.rb 文件,其语法为
FactoryGirl.define do
factory :model do
...
end
...
end
那么 FactoryGirl.define 语法到底是什么意思呢?是否类似于
class FactoryGirl
def factory :model do
end
end
谢谢
与许多 Ruby gem 一样,FactoryGirl 定义了一种“领域特定语言”或 DSL,以简化配置。这是一种常见的模式。
您的示例如下所示:
FactoryGirl.define do
factory :model do
...
end
...
end
发生的事情是使用另外传递一个块factory
的参数调用该方法。:model
与往常一样,所讨论的方法可以自由决定如何处理该块。在这种情况下,它会在工厂生成过程中被保存并稍后执行。
您对它的重新解释没有任何意义,因为那不是有效的 Ruby。您不能将符号作为参数说明符。请记住,这factory
是一种预先存在的方法,而不是您当时定义的方法。
如果这有点模糊,您将需要更多地尝试块以了解它们在 Ruby 中的工作方式。它们被用于许多事情,因此您需要了解每个设置对块可以做什么、它应该返回什么以及它将被调用多少次(如果有的话)的期望。
在 ruby 中,任何东西do end
都是一个块,所有块都附加到一个方法上。
因此,在您的示例中,FactoryGirl.define
是以块为参数的方法调用。factory :model
也是以块为参数的方法调用,但在这种情况下,:model
也是传入的参数。
你可以想象在 FactoryGirl 中定义的方法在概念上是这样的:
class FactoryGirl
def self.define
yield # do something w/ the block passed in
...
end
def factory(model_name, &block)
block.call # do something w/ the block passed in
...
end
end