Skip to content

Testing all Factories (with RSpec)

Christoph Lupprich edited this page Sep 24, 2013 · 27 revisions

To make sure that your models are valid you can automatically test all of your factories with the following code:

require 'spec_helper'

FactoryGirl.factories.map(&:name).each do |factory_name|
  describe "factory #{factory_name}" do
    it 'is valid' do
      factory = build(factory_name)

      if factory.respond_to?(:valid?)
        expect(factory).to be_valid, factory.errors.full_messages.join(',')
      end
    end
  end
end

To additionally test also all your traits, add the following:

...
    describe 'with trait' do
      FactoryGirl.factories[factory_name].definition.defined_traits.map(&:name).each do |trait_name|
        it "is valid with trait #{trait_name}" do
          factory = build(factory_name, trait_name)
          
          if factory.respond_to?(:valid?)
            expect(factory).to be_valid, factory.errors.full_messages.join(',')
          end
        end
      end
    end

Clone this wiki locally