diff --git a/lib/factory_girl/factory.rb b/lib/factory_girl/factory.rb index a4976ff..6b02fee 100644 --- a/lib/factory_girl/factory.rb +++ b/lib/factory_girl/factory.rb @@ -27,7 +27,11 @@ module FactoryGirl end def build_class #:nodoc: - @build_class ||= class_name.to_s.camelize.constantize + @build_class ||= if class_name.is_a? Class + class_name + else + class_name.to_s.camelize.constantize + end end def default_strategy #:nodoc: diff --git a/spec/factory_girl/factory_spec.rb b/spec/factory_girl/factory_spec.rb index ddc2062..f2206d7 100644 --- a/spec/factory_girl/factory_spec.rb +++ b/spec/factory_girl/factory_spec.rb @@ -116,6 +116,25 @@ describe FactoryGirl::Factory, "when defined with a custom class" do its(:build_class) { should == Float } end +describe FactoryGirl::Factory, "when given a class that overrides #to_s" do + let(:overriding_class) { Overriding::Class } + + before do + define_class("Overriding") + define_class("Overriding::Class") do + def self.to_s + "Overriding" + end + end + end + + subject { FactoryGirl::Factory.new(:overriding_class, :class => Overriding::Class) } + + it "sets build_class correctly" do + subject.build_class.should == overriding_class + end +end + describe FactoryGirl::Factory, "when defined with a class instead of a name" do let(:factory_class) { ArgumentError } let(:name) { :argument_error }