Factories

Installation

Add this line to your application's Gemfile:

gem 'factories'

And then execute:

$ bundle

Or install it yourself as:

$ gem install factories

Usage

Factories responds to #build and #create and does exactly what you would expect:

class User < ActiveRecord::Base
  validates :name, presence: true
end

module Factories
  class UserFactory < BaseFactory
    def defaults
      {
        name: "Nathan"
      }
    end
  end
end

user = Factories.build(:user)
user.persisted? # => false

user2 = Factories.create(:user)
user2.persisted? # => true

user3 = Factories.build(:user, name: "Jason")
user3.valid? # => true

user4 = Factories.build(:user, name: nil)
user4.valid? # => false

For the best result, include Factories into your test/spec scope.

An example spec_helper.rb could be:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/{support,factories}/**/*.rb")].each { |f| require f }

RSpec.configure do |config|
  include Factories

  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
end

describe User do
  context "with an invalid model" do
    let(:user) { create(:user, name: nil) }

    it "expects a name sucka" do
      expect(user).to_not be_valid
    end
  end
end