Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

137 lines (108 sloc) 3.484 kb
require "spec_helper"
shared_context "registering custom strategies" do
before do
define_class("NamedObject") do
attr_accessor :name
end
end
let(:custom_strategy) do
Class.new do
def result(evaluation)
evaluation.object.tap do |instance|
instance.name = "Custom strategy"
end
end
end
end
end
describe "register custom strategies" do
include_context "registering custom strategies"
before do
FactoryGirl.define do
factory :named_object do
name "Great"
end
end
end
it "allows overriding default strategies" do
expect(FactoryGirl.build(:named_object).name).to eq "Great"
FactoryGirl.register_strategy(:build, custom_strategy)
expect(FactoryGirl.build(:named_object).name).to eq "Custom strategy"
end
it "allows adding additional strategies" do
FactoryGirl.register_strategy(:insert, custom_strategy)
expect(FactoryGirl.build(:named_object).name).to eq "Great"
expect(FactoryGirl.insert(:named_object).name).to eq "Custom strategy"
end
it "allows using the *_list method to build a list using a custom strategy" do
FactoryGirl.register_strategy(:insert, custom_strategy)
inserted_items = FactoryGirl.insert_list(:named_object, 2)
expect(inserted_items.length).to eq 2
expect(inserted_items.map(&:name)).to eq ["Custom strategy", "Custom strategy"]
end
it "allows using the *_pair method to build a list using a custom strategy" do
FactoryGirl.register_strategy(:insert, custom_strategy)
inserted_items = FactoryGirl.insert_pair(:named_object)
expect(inserted_items.length).to eq 2
expect(inserted_items.map(&:name)).to eq ["Custom strategy", "Custom strategy"]
end
end
describe "including FactoryGirl::Syntax::Methods when custom strategies have been declared" do
include FactoryGirl::Syntax::Methods
include_context "registering custom strategies"
before do
FactoryGirl.define do
factory :named_object do
name "Great"
end
end
end
it "allows adding additional strategies" do
FactoryGirl.register_strategy(:insert, custom_strategy)
expect(insert(:named_object).name).to eq "Custom strategy"
end
end
describe "associations without overriding :strategy" do
include_context "registering custom strategies"
before do
define_model("Post", user_id: :integer) do
belongs_to :user
end
define_model("User", name: :string)
FactoryGirl.define do
factory :post do
user
end
factory :user do
name "John Doe"
end
end
end
it "uses the overridden create strategy to create the association" do
FactoryGirl.register_strategy(:create, custom_strategy)
post = FactoryGirl.build(:post)
expect(post.user.name).to eq "Custom strategy"
end
end
describe "associations overriding :strategy" do
include_context "registering custom strategies"
before do
define_model("Post", user_id: :integer) do
belongs_to :user
end
define_model("User", name: :string)
FactoryGirl.define do
factory :post do
association :user, strategy: :insert
end
factory :user do
name "John Doe"
end
end
end
it "uses the overridden create strategy to create the association" do
FactoryGirl.register_strategy(:insert, custom_strategy)
post = FactoryGirl.build(:post)
expect(post.user.name).to eq "Custom strategy"
end
end
Jump to Line
Something went wrong with that request. Please try again.