57

factory_bot_rails gem を dev に含め、Gemfile にテスト ブロックを含めると、モデルの生成時に Rails によって自動的にファクトリが生成されます。

モデルが生成された後に工場を生成する方法はありますか?


注: FactoryBot は、以前は FactoryGirl という名前でした。

4

8 に答える 8

165

まず、ソース プロジェクトを見て、それがどのように実装されているかを確認します。

https://github.com/thoughtbot/factory_bot_rails/blob/master/lib/generators/factory_bot/model/model_generator.rb

その後、それがどのように機能するかを推測してみてください。

rails g factory_bot:model Car name speed:integer

結果は次のとおりです。

create  test/factories/cars.rb

そして内容:

# Read about factories at https://github.com/thoughtbot/factory_girl

FactoryBot.define do
   factory :car do
     name "MyString"
     speed 1
   end
end

Rails g を使用する場合、いつでも元に戻すことができます。Rails d を使用すると、

rails d factory_bot:model Car name speed:integer

注: FactoryBot は、以前は FactoryGirl という名前でした。

于 2013-02-05T00:08:36.673 に答える
17

この--fixture-replacementオプションを使用すると、テスト データを作成するために何を生成するかをレールに指示できます。config/application.rb次のように、これをファイルのデフォルトとして設定できます。

config.generators do |g|
  g.fixture_replacement :factory_bot, suffix_factory: 'factory'
end

ソース: https://github.com/thoughtbot/factory_bot_rails/blob/master/features/fixture_replacement_config.feature#L21

于 2012-07-28T22:32:39.130 に答える
9

私はまさにこれのための宝石を持っています https://github.com/markburns/to_factory

于 2015-01-08T15:12:45.577 に答える
2

これは答えではありませんが、まだコメントできないため、これを使用して問題の一部を解決できると思います。factory_girl:model コマンド文字列を生成するには、schema_to_scaffold という gem を使用できます。以下を出力します。

rails generate factory_girl:model users fname:string lname:string bdate:date email:string encrypted_pa​​ssword:string

schema.rb または名前を変更した schema.rb から。

こちらまたはこちらをご確認ください

于 2013-05-17T19:55:27.030 に答える
0

正確には関係ありません。

また、既存のデータからファクトリを構築するためのgemも構築しました。

うまくいけば、プロセスを少しスピードアップするのに役立ちます......

puts FactoryBotFactory.build(User.new, file_path: 'spec/factories/user.rb')
puts FactoryBotFactory.build(User.last, file_path: 'spec/factories/user.rb')

# example output from User.new
FactoryBot.define do
  factory :user, class: User do
    id { nil }
    name { nil }
    created_at { nil }
    updated_at { nil }
    display_name { nil }
    image_url { nil }
    is_active { true }
  end
end

偽のデータを作成する必要がある場合は、カスタマイズ コンバーターを構成することもできます。

于 2021-09-19T10:08:18.737 に答える
-1

ここでいくつかの良い答えがありますが、別のオプションはstepfordを使用することです。外部キー制約を持つスキーマを使用する一部のプロジェクトでは、deep_* メソッドなどが役立つ場合があり、コマンドライン経由でファクトリを生成する簡単な方法です。

于 2014-01-23T21:49:32.013 に答える