web-gelistirme-sc.com

FactoryGirl, modelleriniz oluşturulduktan sonra fabrikalar üretebilir mi?

Factory_girl_Rails gem'i dev'inize ve Gemfile'deki test bloklarını dahil ederken, Rails, modelleriniz oluşturulduğunda otomatik olarak fabrikalar üretecektir. 

Modelleriniz üretildikten sonra fabrika üretmenin bir yolu var mı?


Eduardo Santana'nın CEVAPI DOĞRU OLMALI

42
GuiDoody

--fixture-replacement seçeneği Rails'e test verileri oluşturmak için neyin üretileceğini söyleyecektir. Bunu, config/application.rb dosyanızda varsayılan olarak ayarlayabilirsiniz.

config.generators do |g|
  g.fixture_replacement :factory_girl
end
17
cjhveal

İlk olarak, nasıl uygulandığını öğrenmek için kaynak projeye bakın:

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

Ondan sonra, nasıl çalıştığını tahmin etmeye çalışın:

Rails g factory_girl:model Car name speed:integer

Sonuç:

create  test/factories/cars.rb

Ve içerik:

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

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

Unutmayın, Rails g kullanırken, Rails d ile her zaman geri alabilirsiniz.

Rails d factory_girl:model Car name speed:integer
126
Eduardo Santana

Tam olarak bunun için bir mücevher var https://github.com/markburns/to_factory

7
Mark Burns

Bu bir cevap değil, fakat henüz yorum yapamadığımdan: Sorunun bir bölümünü çözmek için bunu kullanabileceğini düşünüyorum. Factory_girl: model komut dizesini oluşturmak için schema_to_scaffold adlı bir mücevher kullanabilirsiniz. Çıktıları:

Raylar factory_girl'i oluşturur: model kullanıcıları fname: string lname: string bdate: tarih email: string encrypted_password: string

schema.rb'nizden veya yeniden adlandırılmış schema.rb'nizden. 

Burada veya Burada

2
frenesim

Bu benim için çalışır Rails g factory_bot: model Kullanıcı

@run_command        = true
@force              = true
@columns_to_ignore  = %w[id created_at update_at]
@tables_to_ignore = %w[schema_migrations ar_internal_metadata]
tables = ActiveRecord::Base.connection.tables.reject{|t| (@tables_to_ignore || []).include?(t)}

tables.each do |table|
  klass = table.singularize.camelcase.constantize
    command = "Rails g factory_bot:model #{klass.to_s} #{klass.columns.reject do |c|
      (@columns_to_ignore || []).include?(c.name)
    end.map do |d|
      "#{d.name}:#{d.sql_type == 'jsonb' ? 'json' : d.type}"
  end.join(' ')}"
  command << ' --force' if @force
  puts command
  puts %x{#{command}} if @run_command
  puts (1..200).to_a.map{}.join('-')
end
0
Davinj