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
ありがとう
FactoryGirl は、多くの Ruby gem と同様に、構成を簡素化する目的で「ドメイン固有言語」または 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