2

factory girl gem を使用しながら、次の構文で factory.rb ファイルを作成します。

FactoryGirl.define do
  factory :model do
    ...  
  end
  ...
end

では、FactoryGirl.define 構文は正確には何を意味するのでしょうか? に似ているか

class FactoryGirl
  def factory :model do
  end
end

ありがとう

4

2 に答える 2

2

FactoryGirl は、多くの Ruby gem と同様に、構成を簡素化する目的で「ドメイン固有言語」または DSL を定義します。これはよくあるパターンです。

あなたの例は次のようになります。

FactoryGirl.define do
  factory :model do
    ...  
  end
  ...
end

何が起こっているのかというと、さらにブロックに渡されfactoryた引数でメソッドが呼び出されています。:modelいつものように、問題のメソッドは、ブロックをどうするかを自由に決定できます。この場合、保存され、後でファクトリ生成プロセス中に実行されます。

有効なRubyではないため、再解釈しても意味がありません。引数指定子としてシンボルを使用することはできません。これfactoryは既存のメソッドであり、その時点で定義しているものではないことに注意してください。

これが少しぼんやりしている場合は、Ruby 内でブロックがどのように機能するかを確認するために、ブロックをさらに実験する必要があります。それらは多くのことに使用されるため、それぞれがブロックができること、何を返す必要があるか、呼び出される場合は何回呼び出されるかについて期待をどのように設定するかを理解する必要があります。

于 2012-06-16T05:07:20.827 に答える
1

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
于 2012-06-16T05:16:49.867 に答える