factory_bot_rails gem を dev に含め、Gemfile にテスト ブロックを含めると、モデルの生成時に Rails によって自動的にファクトリが生成されます。
モデルが生成された後に工場を生成する方法はありますか?
注: FactoryBot は、以前は FactoryGirl という名前でした。
factory_bot_rails gem を dev に含め、Gemfile にテスト ブロックを含めると、モデルの生成時に Rails によって自動的にファクトリが生成されます。
モデルが生成された後に工場を生成する方法はありますか?
注: FactoryBot は、以前は FactoryGirl という名前でした。
まず、ソース プロジェクトを見て、それがどのように実装されているかを確認します。
その後、それがどのように機能するかを推測してみてください。
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 という名前でした。
この--fixture-replacement
オプションを使用すると、テスト データを作成するために何を生成するかをレールに指示できます。config/application.rb
次のように、これをファイルのデフォルトとして設定できます。
config.generators do |g|
g.fixture_replacement :factory_bot, suffix_factory: 'factory'
end
私はまさにこれのための宝石を持っています https://github.com/markburns/to_factory
これは答えではありませんが、まだコメントできないため、これを使用して問題の一部を解決できると思います。factory_girl:model コマンド文字列を生成するには、schema_to_scaffold という gem を使用できます。以下を出力します。
rails generate factory_girl:model users fname:string lname:string bdate:date email:string encrypted_password:string
schema.rb または名前を変更した schema.rb から。
正確には関係ありません。
また、既存のデータからファクトリを構築するための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
偽のデータを作成する必要がある場合は、カスタマイズ コンバーターを構成することもできます。
ここでいくつかの良い答えがありますが、別のオプションはstepfordを使用することです。外部キー制約を持つスキーマを使用する一部のプロジェクトでは、deep_* メソッドなどが役立つ場合があり、コマンドライン経由でファクトリを生成する簡単な方法です。