Easily add factories with valid data for an existing project.
If you find yourself retro-fitting tests this gem will save you some of the legwork.
- auto-generate all factories
- adhoc generate from existing records
- unintrusively update factory files in place
- display factory definition for a record
- parse and write
FactoryBot
syntax or olderFactory.define
syntax
Tested against Ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.x, 2.2.x
ToFactory
writes into the spec/factories
folder. Whilst it
is tested and avoids overwriting existing factories,
it is recommended that you execute after committing or when in a known
safe state.
#Gemfile
#add to whichever environments you want to generate data from
group :test, :development do
gem 'to_factory'
end
For Ruby < 2.x
and older FactoryBot
syntax etc
group :test, :development do
gem "to_factory", "~> 0.2.1"
end
git add spec/factories
git commit -m "I know what I am doing"
rails c
>ToFactory()
#Generate all factories
ToFactory()
#outputs the first record of each ActiveRecord::Base subclass in the models folder
#to spec/factories
#Choose input/output directories
ToFactory.models = "models/this/subfolder/only" #default "./app/models"
ToFactory.factories = "spec/support/factories" #default "./spec/factories"
ToFactory()
#Exclude classes
ToFactory(exclude: [User, Project])
#Use Adhoc instances from the console
ToFactory User.last
#writes to spec/factories/user.rb
FactoryBot.define
factory(:user) do |u|
email "[email protected]"
name "Mike"
end
end
#List defined factory names
ToFactory.definitions
#=> [:user, :admin, :project]
#Display definition from record
ToFactory.definition_for @user
#Display existing definition from name
ToFactory.definition_for :admin
#doesn't overwrite existing factories
ToFactory User.last
#Exception =>
#ToFactory::AlreadyExists: an item for each of the following keys :user already exists
#Choose specific name
ToFactory :admin => User.last
#appends to spec/factories/user.rb
If you are adding specs to an existing project you may want to look at:
- rspec-kickstarter (auto generate specs)
- rspec-kickstarter-vintage (for Ruby 1.8/Rspec 1.x)
- hash_syntax (convert 1.8 syntax to 1.9 and vice-versa)
- transpec (convert old rspec syntax to new expect syntax)