您的模型创建后FactoryGirl可以生成工厂吗?

时间:2012-07-28 15:22:48

标签: ruby-on-rails ruby factory-bot

在Gemfile中的dev和测试块中包含factory_girl_rails gem时,rails会在生成模型时自动生成工厂。

生成模型后有没有办法生成工厂?


Eduardo Santana's ANSWER SHOULD BE CORRECT

7 个答案:

答案 0 :(得分:130)

首先,查看源项目以了解它是如何实现的:

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

之后,尝试猜测它是如何工作的:

rails g factory_girl:model Car name speed:integer

结果是:

create  test/factories/cars.rb

内容:

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

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

请记住,当您使用rails g时,您可以随时使用rails d

撤消它
rails d factory_girl:model Car name speed:integer

答案 1 :(得分:17)

--fixture-replacement选项可让您告诉rails生成用于构建测试数据的内容。您可以在config/application.rb文件中将其设置为默认值,如下所示:

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

答案 2 :(得分:7)

我确实有这个https://github.com/markburns/to_factory

的宝石

答案 3 :(得分:2)

这不是答案,但由于我还不能发表评论: 我想你可以用它来解决部分问题。您可以使用名为schema_to_scaffold的gem生成factory_girl:model命令字符串。它输出:

rails生成factory_girl:模型用户fname:string lname:string bdate:date email:string encrypted_pa​​ssword:string

来自schema.rb的

或重命名的schema.rb。

检查herehere

答案 4 :(得分:0)

这适用于我使用rails g factory_bot:model User 要么运行命令,要么只是输出命令。 你仍然需要填写价值。

@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

答案 5 :(得分:0)

如果您使用的是RSpec,并且想在spec/factories目录中创建工厂,请使用以下命令

rails g factory_girl:model Car name speed:integer --dir spec/factories

答案 6 :(得分:-1)

这里有一些好的答案,但另一种选择是使用stepford。对于某些使用具有外键约束的模式的项目,deep_ *方法等可能有所帮助,这是通过命令行生成工厂的简单方法。