9

FactoryGirl ファクトリの 1 つで使用する通常のメソッドを定義するにはどうすればよいですか? 例えば:

FactoryGirl.define do
  def silly_horse_name
   verbs = %w[brunches dribbles haggles meddles]
   nouns = %w[landmines hamlets vandals piglets]
   "#{verbs.sample} with #{nouns.sample}".titleize
  end

  factory :racehorse do
    name { silly_horse_name } # eg, "Brunches with Landmines"

    after_build do |horse, evaluator|
      puts "oh boy, I built #{silly_horse_name}!"
    end

  end
end

このようにすると、まったく呼び出さsilly_horse_nameれません。に再定義された場合raise 'hey!'、何も起こりません。

FactoryGirl 2.5.2 を使用しています。

4

3 に答える 3

4

グローバル名前空間を汚染しない最善の解決策は、モジュールで定義することでした。例えば、

module FactoryHelpers
  extend self

  def silly_horse_name
    ...
  end
end

FactoryGirl.define do
  factory :racehorse do
    name { silly_horse_name }
  end
end

ソース

于 2014-01-23T04:10:26.380 に答える
1

私の提案は、そのメソッドを で定義することmainです。FactoryGirl.defineしたがって、ブロックの外にあるファイルの先頭に移動してください。

于 2012-08-01T13:49:59.703 に答える