mirror of
https://github.com/thoughtbot/factory_bot.git
synced 2022-11-09 11:43:51 -05:00
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:
parent
65fc7d7eb1
commit
7fdf1a8858
5 changed files with 13 additions and 11 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue