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
FactoryBotsyntax or olderFactory.definesyntax
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 fromgroup:test,:developmentdogem'to_factory'endFor Ruby < 2.x and older FactoryBot syntax etc
group:test,:developmentdogem"to_factory","~> 0.2.1"endgit add spec/factories git commit -m "I know what I am doing" rails c >ToFactory()#Generate all factoriesToFactory()#outputs the first record of each ActiveRecord::Base subclass in the models folder#to spec/factories#Choose input/output directoriesToFactory.models="models/this/subfolder/only"#default "./app/models"ToFactory.factories="spec/support/factories"#default "./spec/factories"ToFactory()#Exclude classesToFactory(exclude: [User,Project])#Use Adhoc instances from the consoleToFactoryUser.last#writes to spec/factories/user.rbFactoryBot.definefactory(:user)do |u| email"[email protected]"name"Mike"endend#List defined factory namesToFactory.definitions#=> [:user, :admin, :project]#Display definition from recordToFactory.definition_for@user#Display existing definition from nameToFactory.definition_for:admin#doesn't overwrite existing factoriesToFactoryUser.last#Exception =>#ToFactory::AlreadyExists: an item for each of the following keys :user already exists#Choose specific nameToFactory:admin=>User.last#appends to spec/factories/user.rbIf 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)