1
0
Fork 0
mirror of https://github.com/thoughtbot/factory_bot_rails.git synced 2022-11-09 11:49:18 -05:00
Factory Bot ♥ Rails
Find a file
Daniel Colson 79ab64d8ad
Add newline between factories in same file
Fixes #305

When generating factories in the same file (for example
spec/factories.rb), before this PR we didn't put newlines between the
factories. So if you generated a user factory, then a robot factory, you
would end up with something like this:

```rb
FactoryBot.define do
  factory :robot do
    name { "MyString" }
  end
  factory :user do
    name { "MyString" }
  end
end
```

With this PR, generating those factories will now look like:

```rb
FactoryBot.define do
  factory :robot do
    name { "MyString" }
  end

  factory :user do
    name { "MyString" }
  end

end
```

Note that the final newline is not ideal, but it will only be added when
generating the first factory, whereas the missing newline after
factories was happening every time we generated a new factory. So
with this PR we will only need to fix a whitespace style error once,
rather than N-1 times. We can could open another issue to fix the extra
newline at the end, but I think it may be more complicated than it
sounds.

Co-authored-by: Nick Sanford <me@nicksanford.io>
2018-11-30 22:07:38 -05:00
bin Add bin/setup, improve contributing guidelines 2014-05-27 00:41:28 -07:00
features Add newline between factories in same file 2018-11-30 22:07:38 -05:00
gemfiles Update Appraisals 2018-10-31 16:22:15 -04:00
lib Add newline between factories in same file 2018-11-30 22:07:38 -05:00
spec Allow reloading of factory definitions 2018-09-08 02:21:47 +00:00
.gitignore Add RuboCop configuration 2018-09-18 23:09:25 -04:00
.hound.yml Configure Hound to use custom .rubocop.yml 2018-10-07 22:49:48 -04:00
.rspec Allow reloading of factory definitions 2018-09-08 02:21:47 +00:00
.rubocop.yml Fix remaining RuboCop TODOs 2018-10-03 21:40:07 -04:00
.travis.yml Stop testing old Ruby and Rails versions 2018-09-08 01:48:42 +00:00
Appraisals Address todos generated by rubocop for files in Rakefile and Appraisals. (#298) 2018-09-28 14:10:19 -04:00
CODE_OF_CONDUCT.md Add standard thoughtbot CODE_OF_CONDUCT.md 2018-09-07 22:16:06 -04:00
CONTRIBUTING.md Rename all girl -> bot 2017-10-20 18:21:52 -04:00
factory_bot_rails.gemspec Address todos generated by rubocop for gemfiles and gemspec files (#295) 2018-09-28 17:32:12 -04:00
Gemfile Address todos generated by rubocop for gemfiles and gemspec files (#295) 2018-09-28 17:32:12 -04:00
Gemfile.lock Update Appraisals 2018-10-31 16:22:15 -04:00
LICENSE Extend copyright year through 2013 2013-01-04 11:14:31 -05:00
NEWS Bump version to 4.11.1 [ci skip] 2018-09-07 16:48:06 -04:00
Rakefile Update Appraisals 2018-10-31 16:22:15 -04:00
README.md Be more consistent with path formatting [skip ci] 2018-11-21 22:34:18 -05:00
RELEASING.md Bump version to 4.11.0 [ci skip] 2018-08-16 07:27:22 -04:00

factory_bot_rails Build Status Code Climate Gem Version Reviewed by Hound

factory_bot is a fixtures replacement with a straightforward definition syntax, support for multiple build strategies (saved instances, unsaved instances, attribute hashes, and stubbed objects), and support for multiple factories for the same class (user, admin_user, and so on), including factory inheritance.

Transitioning from factory_girl_rails?

Check out the guide.

Rails

factory_bot_rails provides Rails integration for factory_bot.

Supported Rails versions are listed in Appraisals. Supported Ruby versions are listed in .travis.yml.

Download

Github: http://github.com/thoughtbot/factory_bot_rails

Gem:

$ gem install factory_bot_rails

Configuration

Add factory_bot_rails to your Gemfile:

group :development, :test do
  gem 'factory_bot_rails'
end

You may want to configure your test suite to include factory_bot methods; see configuration.

Automatic Factory Definition Loading

By default, factory_bot_rails will automatically load factories defined in the following locations, relative to the root of the Rails project:

factories.rb
test/factories.rb
spec/factories.rb
factories/*.rb
test/factories/*.rb
spec/factories/*.rb

You can configure by adding the following to config/application.rb or the appropriate environment configuration in config/environments:

config.factory_bot.definition_file_paths = ["custom/factories"]

This will cause factory_bot_rails to automatically load factories in custom/factories.rb and custom/factories/*.rb.

It is possible to use this setting to share factories from a gem:

class MyEngine < ::Rails::Engine
  config.factory_bot.definition_file_paths =
    File.expand_path('../factories', __FILE__) if defined?(FactoryBotRails)
end

You can also disable automatic factory definition loading entirely by using an empty array:

config.factory_bot.definition_file_paths = []

Generators

Including factory_bot_rails in the development group of your Gemfile will cause Rails to generate factories instead of fixtures. If you want to disable this feature, you can either move factory_bot_rails out of the development group of your Gemfile, or add the following configuration:

config.generators do |g|
  g.factory_bot false
end

If fixture replacement is enabled and you already have a test/factories.rb file (or spec/factories.rb if using rspec_rails), generated factories will be inserted at the top of the existing file. Otherwise, factories will be generated in the test/factories directory (spec/factories if using rspec_rails), in a file matching the name of the table (e.g. test/factories/users.rb).

To generate factories in a different directory, you can use the following configuration:

config.generators do |g|
  g.factory_bot dir: 'custom/dir/for/factories'
end

Note that factory_bot_rails will not automatically load files in custom locations unless you add them to config.factory_bot.defintion_file_paths as well.

The suffix option allows you to customize the name of the generated file with a suffix:

config.generators do |g|
  g.factory_bot suffix: "factory"
end

This will generate test/factories/users_factory.rb instead of test/factories/users.rb.

For even more customization, use the filename_proc option:

config.generators do |g|
  g.factory_bot filename_proc: ->(table_name) { "prefix_#{table_name}_suffix" }
end

Contributing

Please see CONTRIBUTING.md.

factory_bot_rails was originally written by Joe Ferris and is now maintained by Josh Clayton. Many improvements and bugfixes were contributed by the open source community.

License

factory_bot_rails is Copyright © 2008-2016 Joe Ferris and thoughtbot. It is free software, and may be redistributed under the terms specified in the LICENSE file.

About thoughtbot

thoughtbot

factory_bot_rails is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We are passionate about open source software. See our other projects. We are available for hire.