Registries are named

This allows for easier debugging when code attempts to access traits,
sequences, or factories and doesn't find what it was looking for.

Closes #212
This commit is contained in:
Joshua Clayton 2011-10-15 01:54:01 -04:00
parent 65fc7d7eb1
commit 7fdf1a8858
5 changed files with 13 additions and 11 deletions

View File

@ -44,7 +44,7 @@ module FactoryGirl
class DuplicateDefinitionError < RuntimeError; end
def self.factories
@factories ||= Registry.new
@factories ||= Registry.new("Factory")
end
def self.register_factory(factory)
@ -56,7 +56,7 @@ module FactoryGirl
end
def self.sequences
@sequences ||= Registry.new
@sequences ||= Registry.new("Sequence")
end
def self.register_sequence(sequence)
@ -68,7 +68,7 @@ module FactoryGirl
end
def self.traits
@traits ||= Registry.new
@traits ||= Registry.new("Trait")
end
def self.register_trait(trait)

View File

@ -2,7 +2,8 @@ module FactoryGirl
class Registry
include Enumerable
def initialize
def initialize(name)
@name = name
@items = {}
end
@ -12,7 +13,7 @@ module FactoryGirl
end
def find(name)
@items[name.to_sym] or raise ArgumentError.new("Not registered: #{name.to_s}")
@items[name.to_sym] or raise ArgumentError.new("#{@name} not registered: #{name.to_s}")
end
def each(&block)
@ -35,7 +36,7 @@ module FactoryGirl
def add_as(name, item)
if registered?(name)
raise DuplicateDefinitionError, "Already defined: #{name}"
raise DuplicateDefinitionError, "#{@name} already registered: #{name}"
else
@items[name.to_sym] = item
end

View File

@ -39,7 +39,7 @@ describe "modifying factories" do
it "doesn't allow the factory to be subsequently defined" do
expect do
FactoryGirl.define { factory :user }
end.to raise_error(FactoryGirl::DuplicateDefinitionError)
end.to raise_error(FactoryGirl::DuplicateDefinitionError, "Factory already registered: user")
end
it "does allow the factory to be subsequently modified" do

View File

@ -165,6 +165,6 @@ describe "an instance generated by a factory with multiple traits" do
context "factory outside of scope" do
subject { FactoryGirl.create(:user_without_admin_scoping) }
it { expect { subject }.to raise_error(ArgumentError, "Not registered: admin_trait") }
it { expect { subject }.to raise_error(ArgumentError, "Trait not registered: admin_trait") }
end
end

View File

@ -6,8 +6,9 @@ describe FactoryGirl::Registry do
let(:factory) { FactoryGirl::Factory.new(:object) }
let(:other_factory) { FactoryGirl::Factory.new(:string) }
let(:factory_with_aliases) { FactoryGirl::Factory.new(:string, :aliases => aliases) }
let(:registry_name) { "Factory" }
subject { FactoryGirl::Registry.new }
subject { FactoryGirl::Registry.new(registry_name) }
it { should be_kind_of(Enumerable) }
@ -17,7 +18,7 @@ describe FactoryGirl::Registry do
end
it "raises when finding an unregistered factory" do
expect { subject.find(:bogus) }.to raise_error(ArgumentError)
expect { subject.find(:bogus) }.to raise_error(ArgumentError, "Factory not registered: bogus")
end
it "adds and returns a factory" do
@ -62,7 +63,7 @@ describe FactoryGirl::Registry do
it "doesn't allow a duplicate name" do
expect { 2.times { subject.add(factory) } }.
to raise_error(FactoryGirl::DuplicateDefinitionError)
to raise_error(FactoryGirl::DuplicateDefinitionError, "Factory already registered: object")
end
it "registers aliases" do