2010-06-10 13:37:51 -04:00
|
|
|
require 'spec_helper'
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory do
|
2010-06-10 14:58:47 -04:00
|
|
|
before do
|
|
|
|
@name = :user
|
2010-11-11 16:33:45 -05:00
|
|
|
@class = define_class('User')
|
2010-06-24 09:45:57 -04:00
|
|
|
@factory = FactoryGirl::Factory.new(@name)
|
2011-10-07 15:00:38 -04:00
|
|
|
FactoryGirl.register_factory(@factory)
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "has a factory name" do
|
2010-10-02 00:00:58 -04:00
|
|
|
@factory.name.should == @name
|
|
|
|
end
|
|
|
|
|
|
|
|
it "responds to factory_name" do
|
2010-06-10 14:58:47 -04:00
|
|
|
@factory.factory_name.should == @name
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "has a build class" do
|
2010-06-10 14:58:47 -04:00
|
|
|
@factory.build_class.should == @class
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "has a default strategy" do
|
2010-06-10 14:58:47 -04:00
|
|
|
@factory.default_strategy.should == :create
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-11-12 16:21:16 -05:00
|
|
|
it "passes a custom creation block" do
|
2011-12-16 14:27:38 -05:00
|
|
|
proxy = stub("proxy", :result => nil, :add_observer => true)
|
2011-08-12 22:06:10 -04:00
|
|
|
FactoryGirl::Proxy::Build.stubs(:new => proxy)
|
2010-11-12 16:21:16 -05:00
|
|
|
block = lambda {}
|
|
|
|
factory = FactoryGirl::Factory.new(:object)
|
|
|
|
factory.to_create(&block)
|
|
|
|
|
|
|
|
factory.run(FactoryGirl::Proxy::Build, {})
|
|
|
|
|
2011-12-16 14:27:38 -05:00
|
|
|
proxy.should have_received(:result).with(instance_of(FactoryGirl::AttributeAssigner), block)
|
2010-11-12 16:21:16 -05:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "returns associations" do
|
2010-06-24 09:45:57 -04:00
|
|
|
factory = FactoryGirl::Factory.new(:post)
|
2011-05-19 10:56:45 -04:00
|
|
|
FactoryGirl.register_factory(FactoryGirl::Factory.new(:admin))
|
2011-09-23 13:14:02 -04:00
|
|
|
factory.declare_attribute(FactoryGirl::Declaration::Association.new(:author, {}))
|
|
|
|
factory.declare_attribute(FactoryGirl::Declaration::Association.new(:editor, {}))
|
|
|
|
factory.declare_attribute(FactoryGirl::Declaration::Implicit.new(:admin, factory))
|
2010-06-10 14:58:47 -04:00
|
|
|
factory.associations.each do |association|
|
2011-05-19 10:56:45 -04:00
|
|
|
association.should be_association
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
2011-05-19 10:56:45 -04:00
|
|
|
factory.associations.size.should == 3
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-10 14:58:47 -04:00
|
|
|
describe "when overriding generated attributes with a hash" do
|
|
|
|
before do
|
|
|
|
@name = :name
|
|
|
|
@value = 'The price is right!'
|
|
|
|
@hash = { @name => @value }
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "returns the overridden value in the generated attributes" do
|
2011-09-23 13:14:02 -04:00
|
|
|
declaration = FactoryGirl::Declaration::Static.new(@name, 'The price is wrong, Bob!')
|
|
|
|
@factory.declare_attribute(declaration)
|
2010-06-24 09:45:57 -04:00
|
|
|
result = @factory.run(FactoryGirl::Proxy::AttributesFor, @hash)
|
2010-06-10 14:58:47 -04:00
|
|
|
result[@name].should == @value
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "does not call a lazy attribute block for an overridden attribute" do
|
2011-10-15 11:18:27 -04:00
|
|
|
declaration = FactoryGirl::Declaration::Dynamic.new(@name, false, lambda { flunk })
|
2011-09-23 13:14:02 -04:00
|
|
|
@factory.declare_attribute(declaration)
|
2011-10-15 11:18:27 -04:00
|
|
|
@factory.run(FactoryGirl::Proxy::AttributesFor, @hash)
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "overrides a symbol parameter with a string parameter" do
|
2011-09-23 13:14:02 -04:00
|
|
|
declaration = FactoryGirl::Declaration::Static.new(@name, 'The price is wrong, Bob!')
|
|
|
|
@factory.declare_attribute(declaration)
|
2010-06-10 14:58:47 -04:00
|
|
|
@hash = { @name.to_s => @value }
|
2010-06-24 09:45:57 -04:00
|
|
|
result = @factory.run(FactoryGirl::Proxy::AttributesFor, @hash)
|
2010-06-10 14:58:47 -04:00
|
|
|
result[@name].should == @value
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-10 14:58:47 -04:00
|
|
|
describe "overriding an attribute with an alias" do
|
|
|
|
before do
|
2011-09-23 13:14:02 -04:00
|
|
|
@factory.declare_attribute(FactoryGirl::Declaration::Static.new(:test, 'original'))
|
2010-06-10 14:58:47 -04:00
|
|
|
Factory.alias(/(.*)_alias/, '\1')
|
2010-06-24 09:45:57 -04:00
|
|
|
@result = @factory.run(FactoryGirl::Proxy::AttributesFor,
|
2010-06-10 14:58:47 -04:00
|
|
|
:test_alias => 'new')
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "uses the passed in value for the alias" do
|
2010-06-10 14:58:47 -04:00
|
|
|
@result[:test_alias].should == 'new'
|
2009-09-15 15:47:47 -04:00
|
|
|
end
|
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "discards the predefined value for the attribute" do
|
2010-06-10 14:58:47 -04:00
|
|
|
@result[:test].should be_nil
|
2009-09-15 15:47:47 -04:00
|
|
|
end
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-09-15 15:47:47 -04:00
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "guesses the build class from the factory name" do
|
2010-06-10 14:58:47 -04:00
|
|
|
@factory.build_class.should == User
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "creates a new factory using the class of the parent" do
|
2011-10-07 15:00:38 -04:00
|
|
|
child = FactoryGirl::Factory.new(:child, :parent => @factory.name)
|
2011-10-28 10:59:49 -04:00
|
|
|
child.compile
|
2010-06-10 14:58:47 -04:00
|
|
|
child.build_class.should == @factory.build_class
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-10-12 14:32:23 -04:00
|
|
|
it "creates a new factory while overriding the parent class" do
|
2011-10-07 15:00:38 -04:00
|
|
|
child = FactoryGirl::Factory.new(:child, :class => String, :parent => @factory.name)
|
2011-10-28 10:59:49 -04:00
|
|
|
child.compile
|
2010-06-10 14:58:47 -04:00
|
|
|
child.build_class.should == String
|
|
|
|
end
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory, "when defined with a custom class" do
|
2011-08-13 01:03:12 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:author, :class => Float) }
|
|
|
|
its(:build_class) { should == Float }
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-12-14 17:10:32 -05:00
|
|
|
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
|
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory, "when defined with a class instead of a name" do
|
2011-08-13 01:03:12 -04:00
|
|
|
let(:factory_class) { ArgumentError }
|
|
|
|
let(:name) { :argument_error }
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
subject { FactoryGirl::Factory.new(factory_class) }
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
its(:name) { should == name }
|
|
|
|
its(:build_class) { should == factory_class }
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory, "when defined with a custom class name" do
|
2011-08-13 01:03:12 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:author, :class => :argument_error) }
|
|
|
|
its(:build_class) { should == ArgumentError }
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory, "with a name ending in s" do
|
2011-08-13 01:03:12 -04:00
|
|
|
let(:name) { :business }
|
|
|
|
let(:business_class) { Business }
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
before { define_class('Business') }
|
|
|
|
subject { FactoryGirl::Factory.new(name) }
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
its(:name) { should == name }
|
|
|
|
its(:build_class) { should == business_class }
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2010-03-17 18:49:35 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory, "with a string for a name" do
|
2011-08-13 01:03:12 -04:00
|
|
|
let(:name) { :string }
|
|
|
|
subject { FactoryGirl::Factory.new(name.to_s) }
|
|
|
|
its(:name) { should == name }
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2010-03-17 18:49:35 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory, "for namespaced class" do
|
2011-08-13 01:03:12 -04:00
|
|
|
let(:name) { :settings }
|
|
|
|
let(:settings_class) { Admin::Settings }
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
before do
|
|
|
|
define_class("Admin")
|
|
|
|
define_class("Admin::Settings")
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
context "with a namespaced class with Namespace::Class syntax" do
|
|
|
|
subject { FactoryGirl::Factory.new(name, :class => "Admin::Settings") }
|
|
|
|
|
|
|
|
it "sets build_class correctly" do
|
|
|
|
subject.build_class.should == settings_class
|
|
|
|
end
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
context "with a namespaced class with namespace/class syntax" do
|
|
|
|
subject { FactoryGirl::Factory.new(name, :class => "admin/settings") }
|
|
|
|
|
|
|
|
it "sets build_class correctly" do
|
|
|
|
subject.build_class.should == settings_class
|
|
|
|
end
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2010-06-24 09:45:57 -04:00
|
|
|
describe FactoryGirl::Factory do
|
2011-08-19 17:05:53 -04:00
|
|
|
let(:factory_with_non_existent_strategy) do
|
2011-08-13 01:03:12 -04:00
|
|
|
FactoryGirl::Factory.new(:object, :default_strategy => :nonexistent) { }
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:factory_with_stub_strategy) do
|
|
|
|
FactoryGirl::Factory.new(:object, :default_strategy => :stub)
|
|
|
|
end
|
|
|
|
|
2010-06-10 14:58:47 -04:00
|
|
|
before do
|
2011-08-13 01:03:12 -04:00
|
|
|
define_class("User")
|
|
|
|
define_class("Admin", User)
|
2011-10-07 15:00:38 -04:00
|
|
|
FactoryGirl.register_factory(factory_with_stub_strategy)
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-10-20 16:21:50 -04:00
|
|
|
it "raises when trying to use a non-existent strategy" do
|
|
|
|
expect { factory_with_non_existent_strategy }.to raise_error
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
it "creates a new factory with a specified default strategy" do
|
|
|
|
factory_with_stub_strategy.default_strategy.should == :stub
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
describe "defining a child factory without setting default strategy" do
|
2011-10-07 15:00:38 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:other_object, :parent => factory_with_stub_strategy.name) }
|
2011-10-28 10:59:49 -04:00
|
|
|
before { subject.compile }
|
2009-04-11 11:27:23 -04:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
it "inherits default strategy from its parent" do
|
|
|
|
subject.default_strategy.should == :stub
|
2009-10-10 01:23:57 -04:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
describe "defining a child factory with a default strategy" do
|
2011-10-07 15:00:38 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:other_object, :default_strategy => :build, :parent => factory_with_stub_strategy.name) }
|
2011-10-28 10:59:49 -04:00
|
|
|
before { subject.compile }
|
2010-01-08 00:07:41 -05:00
|
|
|
|
2011-08-13 01:03:12 -04:00
|
|
|
it "overrides the default strategy from parent" do
|
|
|
|
subject.default_strategy.should == :build
|
2010-01-08 00:07:41 -05:00
|
|
|
end
|
2009-04-11 11:27:23 -04:00
|
|
|
end
|
2010-06-10 14:58:47 -04:00
|
|
|
end
|
|
|
|
|
2011-06-30 18:27:25 -04:00
|
|
|
describe FactoryGirl::Factory, "human names" do
|
|
|
|
context "factory name without underscores" do
|
2011-08-13 01:03:12 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:user) }
|
|
|
|
its(:names) { should == [:user] }
|
2011-06-30 18:27:25 -04:00
|
|
|
its(:human_names) { should == ["user"] }
|
|
|
|
end
|
2010-10-02 00:00:58 -04:00
|
|
|
|
2011-06-30 18:27:25 -04:00
|
|
|
context "factory name with underscores" do
|
2011-08-13 01:03:12 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:happy_user) }
|
|
|
|
its(:names) { should == [:happy_user] }
|
2011-06-30 18:27:25 -04:00
|
|
|
its(:human_names) { should == ["happy user"] }
|
2010-10-02 00:00:58 -04:00
|
|
|
end
|
|
|
|
|
2011-10-27 15:45:21 -04:00
|
|
|
context "factory name with big letters" do
|
|
|
|
subject { FactoryGirl::Factory.new(:LoL) }
|
|
|
|
its(:names) { should == [:LoL] }
|
|
|
|
its(:human_names) { should == ["lol"] }
|
|
|
|
end
|
|
|
|
|
2011-06-30 18:27:25 -04:00
|
|
|
context "factory name with aliases" do
|
2011-08-13 01:03:12 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:happy_user, :aliases => [:gleeful_user, :person]) }
|
|
|
|
its(:names) { should == [:happy_user, :gleeful_user, :person] }
|
2011-06-30 18:27:25 -04:00
|
|
|
its(:human_names) { should == ["happy user", "gleeful user", "person"] }
|
|
|
|
end
|
|
|
|
end
|
2011-08-20 01:09:29 -04:00
|
|
|
|
|
|
|
describe FactoryGirl::Factory, "running a factory" do
|
2011-09-23 13:14:02 -04:00
|
|
|
subject { FactoryGirl::Factory.new(:user) }
|
2011-10-07 18:19:27 -04:00
|
|
|
let(:attribute) { FactoryGirl::Attribute::Static.new(:name, "value", false) }
|
|
|
|
let(:declaration) { FactoryGirl::Declaration::Static.new(:name, "value", false) }
|
2011-12-16 14:27:38 -05:00
|
|
|
let(:proxy) { stub("proxy", :result => "result", :add_observer => true) }
|
2011-09-23 13:14:02 -04:00
|
|
|
let(:attributes) { [attribute] }
|
|
|
|
let(:attribute_list) { stub('attribute-list', :declarations => [declaration], :to_a => attributes) }
|
2011-08-20 01:09:29 -04:00
|
|
|
|
|
|
|
before do
|
2011-08-20 17:08:15 -04:00
|
|
|
define_model("User", :name => :string)
|
2011-09-23 13:14:02 -04:00
|
|
|
FactoryGirl::Declaration::Static.stubs(:new => declaration)
|
|
|
|
declaration.stubs(:to_attributes => attributes)
|
|
|
|
FactoryGirl::Proxy::Build.stubs(:new => proxy)
|
|
|
|
subject.declare_attribute(declaration)
|
2011-08-20 01:09:29 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "creates the right proxy using the build class when running" do
|
|
|
|
subject.run(FactoryGirl::Proxy::Build, {})
|
2011-12-16 14:27:38 -05:00
|
|
|
FactoryGirl::Proxy::Build.should have_received(:new).once
|
2011-08-20 01:09:29 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "returns the result from the proxy when running" do
|
|
|
|
subject.run(FactoryGirl::Proxy::Build, {}).should == "result"
|
2011-08-20 17:08:15 -04:00
|
|
|
end
|
2011-10-26 23:51:25 -04:00
|
|
|
|
|
|
|
it "calls the block and returns the result" do
|
|
|
|
block_run = nil
|
|
|
|
block = lambda {|result| block_run = "changed" }
|
|
|
|
subject.run(FactoryGirl::Proxy::Build, { }, &block)
|
|
|
|
block_run.should == "changed"
|
|
|
|
end
|
2011-08-20 01:09:29 -04:00
|
|
|
end
|
Traits can be added to factories when the factory creates an instance
This allows for traits to be used with normal factories without having
to name every single factory that uses one (or many) traits.
So, instead of creating male_admin and female_admin factories:
FactoryGirl.define do
factory :user do
trait(:admin) { admin true }
trait(:male) { gender "Male" }
trait(:female) { gender "Female" }
factory :male_admin, :traits => [:male, :admin]
factory :female_admin, :traits => [:admin, :female]
end
end
FactoryGirl.create(:male_admin)
FactoryGirl.create(:female_admin)
You could just create a user with those traits assigned:
FactoryGirl.create(:user, :admin, :male)
FactoryGirl.create(:user, :admin, :female)
This can be combined with attribute overrides as expected.
FactoryGirl.create(:user, :admin, :male, :name => "John Doe")
FactoryGirl.create(:user, :admin, :female, :name => "Jane Doe")
2011-11-18 09:25:49 -05:00
|
|
|
|
|
|
|
describe FactoryGirl::Factory, "#with_traits" do
|
|
|
|
subject { FactoryGirl::Factory.new(:user) }
|
|
|
|
let(:admin_trait) { FactoryGirl::Trait.new(:admin) }
|
|
|
|
let(:female_trait) { FactoryGirl::Trait.new(:female) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
FactoryGirl.register_trait(admin_trait)
|
|
|
|
FactoryGirl.register_trait(female_trait)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns a factory with the correct traits" do
|
2012-01-17 23:15:41 -05:00
|
|
|
subject.with_traits([:admin, :female]).processing_order[1, 2].should == [admin_trait, female_trait]
|
Traits can be added to factories when the factory creates an instance
This allows for traits to be used with normal factories without having
to name every single factory that uses one (or many) traits.
So, instead of creating male_admin and female_admin factories:
FactoryGirl.define do
factory :user do
trait(:admin) { admin true }
trait(:male) { gender "Male" }
trait(:female) { gender "Female" }
factory :male_admin, :traits => [:male, :admin]
factory :female_admin, :traits => [:admin, :female]
end
end
FactoryGirl.create(:male_admin)
FactoryGirl.create(:female_admin)
You could just create a user with those traits assigned:
FactoryGirl.create(:user, :admin, :male)
FactoryGirl.create(:user, :admin, :female)
This can be combined with attribute overrides as expected.
FactoryGirl.create(:user, :admin, :male, :name => "John Doe")
FactoryGirl.create(:user, :admin, :female, :name => "Jane Doe")
2011-11-18 09:25:49 -05:00
|
|
|
end
|
|
|
|
|
2012-01-17 23:15:41 -05:00
|
|
|
it "doesn't modify the original factory's processing order" do
|
Traits can be added to factories when the factory creates an instance
This allows for traits to be used with normal factories without having
to name every single factory that uses one (or many) traits.
So, instead of creating male_admin and female_admin factories:
FactoryGirl.define do
factory :user do
trait(:admin) { admin true }
trait(:male) { gender "Male" }
trait(:female) { gender "Female" }
factory :male_admin, :traits => [:male, :admin]
factory :female_admin, :traits => [:admin, :female]
end
end
FactoryGirl.create(:male_admin)
FactoryGirl.create(:female_admin)
You could just create a user with those traits assigned:
FactoryGirl.create(:user, :admin, :male)
FactoryGirl.create(:user, :admin, :female)
This can be combined with attribute overrides as expected.
FactoryGirl.create(:user, :admin, :male, :name => "John Doe")
FactoryGirl.create(:user, :admin, :female, :name => "Jane Doe")
2011-11-18 09:25:49 -05:00
|
|
|
subject.with_traits([:admin, :female])
|
2012-01-17 23:15:41 -05:00
|
|
|
subject.processing_order.should == [subject.definition]
|
Traits can be added to factories when the factory creates an instance
This allows for traits to be used with normal factories without having
to name every single factory that uses one (or many) traits.
So, instead of creating male_admin and female_admin factories:
FactoryGirl.define do
factory :user do
trait(:admin) { admin true }
trait(:male) { gender "Male" }
trait(:female) { gender "Female" }
factory :male_admin, :traits => [:male, :admin]
factory :female_admin, :traits => [:admin, :female]
end
end
FactoryGirl.create(:male_admin)
FactoryGirl.create(:female_admin)
You could just create a user with those traits assigned:
FactoryGirl.create(:user, :admin, :male)
FactoryGirl.create(:user, :admin, :female)
This can be combined with attribute overrides as expected.
FactoryGirl.create(:user, :admin, :male, :name => "John Doe")
FactoryGirl.create(:user, :admin, :female, :name => "Jane Doe")
2011-11-18 09:25:49 -05:00
|
|
|
end
|
|
|
|
end
|