A library for setting up Ruby objects as test data.
Go to file
Daniel Colson 5a3247dd8c Avoid stubbing id for records without primary key
Fixes #1305

Before Rails 6 when the build_stubbed strategy assigned an id on a
record without a primary key column, the `id=` method would no-op, and
the record would end up looking like a new_record (i.e. `new_record?`
would return true because the id was nil).

This problem surfaced because of a [change in Rails 6][rails], which
caused `id=` to raise a potentially confusing
`ActiveModel::MissingAttributeError: can't write unknown attribute ''`
for records without a primary key column.

Since build_stubbed stubbed was calling `id=` for all instances,
regardless of whether they had primary keys, it was raising the above
error.

To avoid this error, we check whether the instance has a primary_key
defined before setting the id.

We also changed `persisted?` and `new_record?` to be less dependent on
the id. That way those methods will work as expected for records without
primary keys.

[rails]: b6828fc915

Co-authored-by: Jesse Bailey <jbailey117@gmail.com>
2019-07-19 15:18:11 -04:00
.github Add basic AR setup to reproduction script 2019-06-07 11:34:12 -04:00
features Rubocop: Fix Style/StringLiterals Offenses (#1216) 2018-10-07 21:45:51 -04:00
gemfiles Bump all dev and test dependencies 2019-06-21 11:36:38 -04:00
lib Avoid stubbing id for records without primary key 2019-07-19 15:18:11 -04:00
spec Avoid stubbing id for records without primary key 2019-07-19 15:18:11 -04:00
.gitignore Add rubocop 2018-09-18 22:58:56 -04:00
.hound.yml Ask Hound to use custom .rubocop.yml 2018-10-07 17:45:13 -04:00
.rspec Remove unnecessary spec_helper requires 2018-05-21 18:03:28 +01:00
.rubocop.yml Arrest lines of an unsavory length 2018-12-12 11:05:13 -05:00
.simplecov Clean up SimpleCov usage 2012-04-23 21:50:39 -05:00
.travis.yml Test against activerecord 6.0 2019-01-30 21:31:39 -05:00
.yardopts Fix missing docs (#1172) 2018-09-03 13:27:53 +00:00
Appraisals Test against latest versions of Rails 2019-04-25 00:31:27 -04:00
CODE_OF_CONDUCT.md Add standard thoughtbot CODE_OF_CONDUCT.md 2018-09-07 22:11:26 -04:00
CONTRIBUTING.md Replace 'girl' with 'bot' everywhere (#1051) 2017-10-20 15:20:28 -04:00
GETTING_STARTED.md Mark as code for association strategy 2019-06-04 20:11:16 -04:00
Gemfile Update development dependencies 2019-01-04 20:59:12 -05:00
Gemfile.lock Update yard from 0.9.19 to 0.9.20 2019-07-12 08:55:15 -04:00
LICENSE Update copyright notice to 2019 [ci skip] 2019-02-08 14:04:54 -05:00
NAME.md Update naming history explanation 2017-10-24 14:17:02 -04:00
NEWS.md Bump version to 5.0.2 [ci skip] 2019-02-22 16:18:39 -05:00
README.md Add useful tools section to README 2019-05-17 13:44:44 -04:00
RELEASING.md Fix Markdown formatting 2019-02-26 11:07:39 -05:00
Rakefile Update Appraisals 2018-10-31 15:35:35 -04:00
cucumber.yml Fixed issues with some attributes being skipped and added support for linked associations in step definitions 2009-09-15 16:56:20 -04:00
factory_bot.gemspec Bump to version 5.0.1 [ci skip] 2019-02-15 15:39:11 -08:00

README.md

factory_bot 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.

If you want to use factory_bot with Rails, see factory_bot_rails.

Interested in the history of the project name?

Transitioning from factory_girl?

Check out the guide.

Documentation

You should find the documentation for your version of factory_bot on Rubygems.

See GETTING_STARTED for information on defining and using factories. We also have a detailed introductory video, available for free on Upcase.

Install

Add the following line to Gemfile:

gem 'factory_bot'

and run bundle install from your shell.

To install the gem manually from your shell, run:

gem install factory_bot

Supported Ruby versions

The factory_bot 5.x series supports MRI Ruby 2.3+.

The factory_bot 3.x+ series supports MRI Ruby 1.9. Additionally, factory_bot 3.6+ supports JRuby 1.6.7.2+ while running in 1.9 mode. See GETTING_STARTED for more information on configuring the JRuby environment.

For versions of Ruby prior to 1.9, please use factory_bot 2.x.

More Information

Useful Tools

Contributing

Please see CONTRIBUTING.md.

factory_bot 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 is Copyright © 2008-2019 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 is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We love open source software! See our other projects or hire us to design, develop, and grow your product.