mirror of
https://github.com/thoughtbot/factory_bot.git
synced 2022-11-09 11:43:51 -05:00
Switches mocking library to rspec
This commit is contained in:
parent
762370cbd9
commit
95188e2e78
22 changed files with 151 additions and 76 deletions
|
@ -35,8 +35,6 @@ GEM
|
||||||
ffi (~> 1.9.10)
|
ffi (~> 1.9.10)
|
||||||
rspec-expectations (>= 2.99)
|
rspec-expectations (>= 2.99)
|
||||||
thor (~> 0.19)
|
thor (~> 0.19)
|
||||||
bourne (1.6.0)
|
|
||||||
mocha (~> 1.1)
|
|
||||||
builder (3.2.2)
|
builder (3.2.2)
|
||||||
childprocess (0.5.9)
|
childprocess (0.5.9)
|
||||||
ffi (~> 1.0, >= 1.0.11)
|
ffi (~> 1.0, >= 1.0.11)
|
||||||
|
@ -61,10 +59,7 @@ GEM
|
||||||
jdbc-sqlite3 (3.8.11.2)
|
jdbc-sqlite3 (3.8.11.2)
|
||||||
json (1.8.6)
|
json (1.8.6)
|
||||||
json (1.8.6-java)
|
json (1.8.6-java)
|
||||||
metaclass (0.0.4)
|
|
||||||
minitest (5.9.1)
|
minitest (5.9.1)
|
||||||
mocha (1.1.0)
|
|
||||||
metaclass (~> 0.0.1)
|
|
||||||
multi_json (1.11.2)
|
multi_json (1.11.2)
|
||||||
multi_test (0.1.2)
|
multi_test (0.1.2)
|
||||||
rake (10.5.0)
|
rake (10.5.0)
|
||||||
|
@ -107,11 +102,9 @@ DEPENDENCIES
|
||||||
activerecord-jdbcsqlite3-adapter
|
activerecord-jdbcsqlite3-adapter
|
||||||
appraisal (~> 2.1.0)
|
appraisal (~> 2.1.0)
|
||||||
aruba
|
aruba
|
||||||
bourne
|
|
||||||
cucumber (~> 1.3.15)
|
cucumber (~> 1.3.15)
|
||||||
factory_girl!
|
factory_girl!
|
||||||
jdbc-sqlite3
|
jdbc-sqlite3
|
||||||
mocha (>= 0.12.8)
|
|
||||||
rspec (~> 3.0)
|
rspec (~> 3.0)
|
||||||
rspec-its (~> 1.0)
|
rspec-its (~> 1.0)
|
||||||
simplecov
|
simplecov
|
||||||
|
|
|
@ -28,8 +28,6 @@ Gem::Specification.new do |s|
|
||||||
s.add_development_dependency("timecop")
|
s.add_development_dependency("timecop")
|
||||||
s.add_development_dependency("simplecov")
|
s.add_development_dependency("simplecov")
|
||||||
s.add_development_dependency("aruba")
|
s.add_development_dependency("aruba")
|
||||||
s.add_development_dependency("mocha", ">= 0.12.8")
|
|
||||||
s.add_development_dependency("bourne")
|
|
||||||
s.add_development_dependency("appraisal", "~> 2.1.0")
|
s.add_development_dependency("appraisal", "~> 2.1.0")
|
||||||
s.add_development_dependency("activerecord", ">= 3.0.0")
|
s.add_development_dependency("activerecord", ">= 3.0.0")
|
||||||
s.add_development_dependency("yard")
|
s.add_development_dependency("yard")
|
||||||
|
|
|
@ -25,9 +25,9 @@ describe "calling methods on the model instance" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't instantiate a record with attributes_for" do
|
it "doesn't instantiate a record with attributes_for" do
|
||||||
User.stubs(:new)
|
allow(User).to receive(:new)
|
||||||
FactoryGirl.attributes_for(:user)
|
FactoryGirl.attributes_for(:user)
|
||||||
expect(User).to have_received(:new).never
|
expect(User).to_not have_received(:new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,30 @@ describe FactoryGirl::Attribute::Association do
|
||||||
let(:name) { :author }
|
let(:name) { :author }
|
||||||
let(:factory) { :user }
|
let(:factory) { :user }
|
||||||
let(:overrides) { { first_name: "John" } }
|
let(:overrides) { { first_name: "John" } }
|
||||||
let(:association) { stub("association") }
|
let(:association) { double("association") }
|
||||||
|
|
||||||
subject { FactoryGirl::Attribute::Association.new(name, factory, overrides) }
|
subject { FactoryGirl::Attribute::Association.new(name, factory, overrides) }
|
||||||
before { subject.stubs(association: association) }
|
before do
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
# FactoryGirl::Attribute::Association does not explicitly define an
|
||||||
|
# `association` instance method, so when we stub it out below,
|
||||||
|
# rspec-mock complains that it can't find the method.
|
||||||
|
#
|
||||||
|
# Therefore, temporarily turn off this feature.
|
||||||
|
mocks.verify_partial_doubles = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
allow(subject).to receive(:association).and_return association
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
mocks.verify_partial_doubles = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it { should be_association }
|
it { should be_association }
|
||||||
its(:name) { should eq name }
|
its(:name) { should eq name }
|
||||||
|
|
|
@ -29,7 +29,23 @@ describe FactoryGirl::Attribute::Dynamic do
|
||||||
let(:result) { "other attribute value" }
|
let(:result) { "other attribute value" }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
subject.stubs(attribute_defined_on_attribute: result)
|
RSpec.configure do |config|
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
mocks.verify_partial_doubles = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
allow(
|
||||||
|
subject,
|
||||||
|
).to receive(:attribute_defined_on_attribute).and_return result
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
mocks.verify_partial_doubles = true
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "evaluates the attribute from the attribute" do
|
it "evaluates the attribute from the attribute" do
|
||||||
|
|
|
@ -7,7 +7,7 @@ describe FactoryGirl::Declaration::Implicit do
|
||||||
|
|
||||||
context "with a known factory" do
|
context "with a known factory" do
|
||||||
before do
|
before do
|
||||||
FactoryGirl.factories.stubs(:registered? => true)
|
allow(FactoryGirl.factories).to receive(:registered?).and_return true
|
||||||
end
|
end
|
||||||
|
|
||||||
it { should be_association }
|
it { should be_association }
|
||||||
|
@ -16,7 +16,7 @@ describe FactoryGirl::Declaration::Implicit do
|
||||||
|
|
||||||
context "with a known sequence" do
|
context "with a known sequence" do
|
||||||
before do
|
before do
|
||||||
FactoryGirl.sequences.stubs(:registered? => true)
|
allow(FactoryGirl.sequences).to receive(:registered?).and_return true
|
||||||
end
|
end
|
||||||
|
|
||||||
it { should_not be_association }
|
it { should_not be_association }
|
||||||
|
|
|
@ -1,20 +1,27 @@
|
||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
|
|
||||||
describe FactoryGirl::DeclarationList, "#attributes" do
|
describe FactoryGirl::DeclarationList, "#attributes" do
|
||||||
let(:static_attribute_1) { stub("static attribute 1") }
|
let(:static_attribute_1) { double("static attribute 1") }
|
||||||
let(:static_attribute_2) { stub("static attribute 2") }
|
let(:static_attribute_2) { double("static attribute 2") }
|
||||||
let(:dynamic_attribute_1) { stub("dynamic attribute 1") }
|
let(:dynamic_attribute_1) { double("dynamic attribute 1") }
|
||||||
let(:static_declaration) { stub("static declaration", to_attributes: [static_attribute_1, static_attribute_2]) }
|
let(:static_declaration) do
|
||||||
let(:dynamic_declaration) { stub("static declaration", to_attributes: [dynamic_attribute_1]) }
|
double(
|
||||||
|
"static declaration",
|
||||||
|
to_attributes: [static_attribute_1, static_attribute_2],
|
||||||
|
)
|
||||||
|
end
|
||||||
|
let(:dynamic_declaration) do
|
||||||
|
double("static declaration", to_attributes: [dynamic_attribute_1])
|
||||||
|
end
|
||||||
|
|
||||||
it "returns an AttributeList" do
|
it "returns an AttributeList" do
|
||||||
expect(subject.attributes).to be_a(FactoryGirl::AttributeList)
|
expect(subject.attributes).to be_a(FactoryGirl::AttributeList)
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:attribute_list) { stub("attribute list", define_attribute: true) }
|
let(:attribute_list) { double("attribute list", define_attribute: true) }
|
||||||
|
|
||||||
it "defines each attribute on the attribute list" do
|
it "defines each attribute on the attribute list" do
|
||||||
FactoryGirl::AttributeList.stubs(new: attribute_list)
|
allow(FactoryGirl::AttributeList).to receive(:new).and_return attribute_list
|
||||||
|
|
||||||
subject.declare_attribute(static_declaration)
|
subject.declare_attribute(static_declaration)
|
||||||
subject.declare_attribute(dynamic_declaration)
|
subject.declare_attribute(dynamic_declaration)
|
||||||
|
@ -28,9 +35,11 @@ describe FactoryGirl::DeclarationList, "#attributes" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe FactoryGirl::DeclarationList, "#declare_attribute" do
|
describe FactoryGirl::DeclarationList, "#declare_attribute" do
|
||||||
let(:declaration_1) { stub("declaration", name: "declaration 1") }
|
let(:declaration_1) { double("declaration", name: "declaration 1") }
|
||||||
let(:declaration_2) { stub("declaration", name: "declaration 2") }
|
let(:declaration_2) { double("declaration", name: "declaration 2") }
|
||||||
let(:declaration_with_same_name) { stub("declaration", name: "declaration 1") }
|
let(:declaration_with_same_name) do
|
||||||
|
double("declaration", name: "declaration 1")
|
||||||
|
end
|
||||||
|
|
||||||
context "when not overridable" do
|
context "when not overridable" do
|
||||||
it "adds the declaration to the list" do
|
it "adds the declaration to the list" do
|
||||||
|
|
|
@ -87,7 +87,7 @@ describe FactoryGirl::DefinitionProxy, "#sequence" do
|
||||||
subject { FactoryGirl::Definition.new }
|
subject { FactoryGirl::Definition.new }
|
||||||
let(:proxy) { FactoryGirl::DefinitionProxy.new(subject) }
|
let(:proxy) { FactoryGirl::DefinitionProxy.new(subject) }
|
||||||
|
|
||||||
before { FactoryGirl::Sequence.stubs(:new) }
|
before { allow(FactoryGirl::Sequence).to receive(:new) }
|
||||||
|
|
||||||
it "creates a new sequence starting at 1" do
|
it "creates a new sequence starting at 1" do
|
||||||
proxy.sequence(:great)
|
proxy.sequence(:great)
|
||||||
|
|
|
@ -9,15 +9,17 @@ describe FactoryGirl::Definition, "with a name" do
|
||||||
subject { FactoryGirl::Definition.new(name) }
|
subject { FactoryGirl::Definition.new(name) }
|
||||||
|
|
||||||
it "creates a new attribute list with the name passed" do
|
it "creates a new attribute list with the name passed" do
|
||||||
FactoryGirl::DeclarationList.stubs(:new)
|
allow(FactoryGirl::DeclarationList).to receive(:new)
|
||||||
subject
|
subject
|
||||||
expect(FactoryGirl::DeclarationList).to have_received(:new).with(name)
|
expect(FactoryGirl::DeclarationList).to have_received(:new).with(name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe FactoryGirl::Definition, "#overridable" do
|
describe FactoryGirl::Definition, "#overridable" do
|
||||||
let(:list) { stub("declaration list", overridable: true) }
|
let(:list) { double("declaration list", overridable: true) }
|
||||||
before { FactoryGirl::DeclarationList.stubs(new: list) }
|
before do
|
||||||
|
allow(FactoryGirl::DeclarationList).to receive(:new).and_return list
|
||||||
|
end
|
||||||
|
|
||||||
it "sets the declaration list as overridable" do
|
it "sets the declaration list as overridable" do
|
||||||
expect(subject.overridable).to eq subject
|
expect(subject.overridable).to eq subject
|
||||||
|
@ -26,8 +28,8 @@ describe FactoryGirl::Definition, "#overridable" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe FactoryGirl::Definition, "defining traits" do
|
describe FactoryGirl::Definition, "defining traits" do
|
||||||
let(:trait_1) { stub("trait") }
|
let(:trait_1) { double("trait") }
|
||||||
let(:trait_2) { stub("trait") }
|
let(:trait_2) { double("trait") }
|
||||||
|
|
||||||
it "maintains a list of traits" do
|
it "maintains a list of traits" do
|
||||||
subject.define_trait(trait_1)
|
subject.define_trait(trait_1)
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
|
|
||||||
describe FactoryGirl::Decorator::DisallowsDuplicatesRegistry do
|
describe FactoryGirl::Decorator::DisallowsDuplicatesRegistry do
|
||||||
let(:registry) { stub("registry", name: 'Great thing', register: true) }
|
let(:registry) do
|
||||||
|
double("registry", name: "Great thing", register: true)
|
||||||
|
end
|
||||||
|
|
||||||
subject { described_class.new(registry) }
|
subject { described_class.new(registry) }
|
||||||
|
|
||||||
it "delegates #register to the registry when not registered" do
|
it "delegates #register to the registry when not registered" do
|
||||||
registry.stubs(registered?: false)
|
allow(registry).to receive(:registered?).and_return false
|
||||||
subject.register(:awesome, {})
|
subject.register(:awesome, {})
|
||||||
expect(registry).to have_received(:register).with(:awesome, {})
|
expect(registry).to have_received(:register).with(:awesome, {})
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises when attempting to #register a previously registered strategy" do
|
it "raises when attempting to #register a previously registered strategy" do
|
||||||
registry.stubs(registered?: true)
|
allow(registry).to receive(:registered?).and_return true
|
||||||
expect { subject.register(:same_name, {}) }.
|
expect { subject.register(:same_name, {}) }.
|
||||||
to raise_error(FactoryGirl::DuplicateDefinitionError, "Great thing already registered: same_name")
|
to raise_error(FactoryGirl::DuplicateDefinitionError, "Great thing already registered: same_name")
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,7 +15,11 @@ describe FactoryGirl::EvaluatorClassDefiner do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "evaluates the block in the context of the evaluator" do
|
it "evaluates the block in the context of the evaluator" do
|
||||||
dependency_attribute = stub("dependency", name: :dependency, to_proc: -> { 1 })
|
dependency_attribute = double(
|
||||||
|
"dependency",
|
||||||
|
name: :dependency,
|
||||||
|
to_proc: -> { 1 },
|
||||||
|
)
|
||||||
dependency_attribute = stub_attribute(:dependency) { 1 }
|
dependency_attribute = stub_attribute(:dependency) { 1 }
|
||||||
attribute = stub_attribute(:attribute) { dependency + 1 }
|
attribute = stub_attribute(:attribute) { dependency + 1 }
|
||||||
evaluator = define_evaluator(attributes: [dependency_attribute, attribute])
|
evaluator = define_evaluator(attributes: [dependency_attribute, attribute])
|
||||||
|
@ -72,6 +76,6 @@ describe FactoryGirl::EvaluatorClassDefiner do
|
||||||
|
|
||||||
def stub_attribute(name = :attribute, &value)
|
def stub_attribute(name = :attribute, &value)
|
||||||
value ||= -> {}
|
value ||= -> {}
|
||||||
stub(name.to_s, name: name.to_sym, to_proc: value)
|
double(name.to_s, name: name.to_sym, to_proc: value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,8 +17,8 @@ describe FactoryGirl::Factory do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "passes a custom creation block" do
|
it "passes a custom creation block" do
|
||||||
strategy = stub("strategy", result: nil, add_observer: true)
|
strategy = double("strategy", result: nil, add_observer: true)
|
||||||
FactoryGirl::Strategy::Build.stubs(new: strategy)
|
allow(FactoryGirl::Strategy::Build).to receive(:new).and_return strategy
|
||||||
block = -> {}
|
block = -> {}
|
||||||
factory = FactoryGirl::Factory.new(:object)
|
factory = FactoryGirl::Factory.new(:object)
|
||||||
factory.to_create(&block)
|
factory.to_create(&block)
|
||||||
|
@ -229,15 +229,20 @@ describe FactoryGirl::Factory, "running a factory" do
|
||||||
subject { FactoryGirl::Factory.new(:user) }
|
subject { FactoryGirl::Factory.new(:user) }
|
||||||
let(:attribute) { FactoryGirl::Attribute::Static.new(:name, "value", false) }
|
let(:attribute) { FactoryGirl::Attribute::Static.new(:name, "value", false) }
|
||||||
let(:declaration) { FactoryGirl::Declaration::Static.new(:name, "value", false) }
|
let(:declaration) { FactoryGirl::Declaration::Static.new(:name, "value", false) }
|
||||||
let(:strategy) { stub("strategy", result: "result", add_observer: true) }
|
let(:strategy) do
|
||||||
|
double("strategy", result: "result", add_observer: true)
|
||||||
|
end
|
||||||
let(:attributes) { [attribute] }
|
let(:attributes) { [attribute] }
|
||||||
let(:attribute_list) { stub('attribute-list', declarations: [declaration], to_a: attributes) }
|
let(:attribute_list) do
|
||||||
|
double("attribute-list", declarations: [declaration], to_a: attributes)
|
||||||
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
define_model("User", name: :string)
|
define_model("User", name: :string)
|
||||||
FactoryGirl::Declaration::Static.stubs(new: declaration)
|
allow(FactoryGirl::Declaration::Static).to receive(:new).
|
||||||
declaration.stubs(to_attributes: attributes)
|
and_return declaration
|
||||||
FactoryGirl::Strategy::Build.stubs(new: strategy)
|
allow(declaration).to receive(:to_attributes).and_return attributes
|
||||||
|
allow(FactoryGirl::Strategy::Build).to receive(:new).and_return strategy
|
||||||
subject.declare_attribute(declaration)
|
subject.declare_attribute(declaration)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
shared_examples_for "finds definitions" do
|
shared_examples_for "finds definitions" do
|
||||||
before do
|
before do
|
||||||
FactoryGirl.stubs(:load)
|
allow(FactoryGirl).to receive(:load)
|
||||||
FactoryGirl.find_definitions
|
FactoryGirl.find_definitions
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -79,10 +79,11 @@ describe "definition loading" do
|
||||||
in_directory_with_files File.join(dir, 'factories', 'b.rb'),
|
in_directory_with_files File.join(dir, 'factories', 'b.rb'),
|
||||||
File.join(dir, 'factories', 'a.rb')
|
File.join(dir, 'factories', 'a.rb')
|
||||||
it "loads the files in the right order" do
|
it "loads the files in the right order" do
|
||||||
FactoryGirl.stubs(:load)
|
wd = File.dirname(__FILE__)
|
||||||
sorted_load_order = sequence("load order")
|
file_b = File.join(wd, "tmp", dir, "factories", "b.rb")
|
||||||
FactoryGirl.expects(:load).with(includes("a.rb")).in_sequence(sorted_load_order)
|
file_a = File.join(wd, "tmp", dir, "factories", "a.rb")
|
||||||
FactoryGirl.expects(:load).with(includes("b.rb")).in_sequence(sorted_load_order)
|
allow(FactoryGirl).to receive(:load).with(file_a).ordered
|
||||||
|
allow(FactoryGirl).to receive(:load).with(file_b).ordered
|
||||||
FactoryGirl.find_definitions
|
FactoryGirl.find_definitions
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe FactoryGirl::Registry do
|
describe FactoryGirl::Registry do
|
||||||
let(:registered_object) { stub("registered object") }
|
let(:registered_object) { double("registered object") }
|
||||||
let(:second_registered_object) { stub("second registered object") }
|
let(:second_registered_object) { double("second registered object") }
|
||||||
|
|
||||||
subject { FactoryGirl::Registry.new("Great thing") }
|
subject { FactoryGirl::Registry.new("Great thing") }
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ describe FactoryGirl::Sequence do
|
||||||
|
|
||||||
describe "a custom sequence and scope" do
|
describe "a custom sequence and scope" do
|
||||||
subject { FactoryGirl::Sequence.new(:name, 'A') { |n| "=#{n}#{foo}" } }
|
subject { FactoryGirl::Sequence.new(:name, 'A') { |n| "=#{n}#{foo}" } }
|
||||||
let(:scope) { stub('scope', foo: 'attribute') }
|
let(:scope) { double("scope", foo: "attribute") }
|
||||||
|
|
||||||
it 'increments within the correct scope' do
|
it 'increments within the correct scope' do
|
||||||
expect(subject.next(scope)).to eq '=Aattribute'
|
expect(subject.next(scope)).to eq '=Aattribute'
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe FactoryGirl::Strategy::AttributesFor do
|
describe FactoryGirl::Strategy::AttributesFor do
|
||||||
let(:result) { { name: "John Doe", gender: "Male", admin: false } }
|
let(:result) { { name: "John Doe", gender: "Male", admin: false } }
|
||||||
let(:evaluation) { stub("evaluation", hash: result) }
|
let(:evaluation) { double("evaluation", hash: result) }
|
||||||
|
|
||||||
it_should_behave_like "strategy without association support"
|
it_should_behave_like "strategy without association support"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,22 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe FactoryGirl::Strategy::Create do
|
describe FactoryGirl::Strategy::Create do
|
||||||
|
before do
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
mocks.verify_partial_doubles = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
mocks.verify_partial_doubles = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it_should_behave_like "strategy with association support", :create
|
it_should_behave_like "strategy with association support", :create
|
||||||
it_should_behave_like "strategy with callbacks", :after_build, :before_create, :after_create
|
it_should_behave_like "strategy with callbacks", :after_build, :before_create, :after_create
|
||||||
|
|
||||||
|
@ -18,7 +34,8 @@ describe FactoryGirl::Strategy::Create do
|
||||||
end
|
end
|
||||||
|
|
||||||
evaluation = evaluation_class.new
|
evaluation = evaluation_class.new
|
||||||
evaluation.stubs(object: nil, notify: nil)
|
allow(evaluation).to receive(:object)
|
||||||
|
allow(evaluation).to receive(:notify)
|
||||||
subject.result(evaluation)
|
subject.result(evaluation)
|
||||||
expect(evaluation.block_run).to be true
|
expect(evaluation.block_run).to be true
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,7 +32,9 @@ describe FactoryGirl::Strategy::Stub do
|
||||||
end.new
|
end.new
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:evaluation) { stub("evaluation", object: result_instance, notify: true) }
|
let(:evaluation) do
|
||||||
|
double("evaluation", object: result_instance, notify: true)
|
||||||
|
end
|
||||||
|
|
||||||
it { expect(subject.result(evaluation)).not_to be_new_record }
|
it { expect(subject.result(evaluation)).not_to be_new_record }
|
||||||
it { expect(subject.result(evaluation)).to be_persisted }
|
it { expect(subject.result(evaluation)).to be_persisted }
|
||||||
|
|
|
@ -14,7 +14,10 @@ describe FactoryGirl::StrategyCalculator do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when a symbol" do
|
context "when a symbol" do
|
||||||
before { FactoryGirl.stubs(:strategy_by_name).returns(strategy) }
|
before do
|
||||||
|
allow(FactoryGirl).to receive(:strategy_by_name).and_return(strategy)
|
||||||
|
end
|
||||||
|
|
||||||
subject { FactoryGirl::StrategyCalculator.new(:build).strategy }
|
subject { FactoryGirl::StrategyCalculator.new(:build).strategy }
|
||||||
|
|
||||||
it "finds the strategy by name" do
|
it "finds the strategy by name" do
|
||||||
|
|
|
@ -8,14 +8,17 @@ require 'rspec/its'
|
||||||
require "simplecov"
|
require "simplecov"
|
||||||
|
|
||||||
require 'factory_girl'
|
require 'factory_girl'
|
||||||
require "mocha/api"
|
|
||||||
require "bourne"
|
|
||||||
require "timecop"
|
require "timecop"
|
||||||
|
|
||||||
Dir["spec/support/**/*.rb"].each { |f| require File.expand_path(f) }
|
Dir["spec/support/**/*.rb"].each { |f| require File.expand_path(f) }
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.mock_framework = :mocha
|
config.mock_with :rspec do |mocks|
|
||||||
|
# Prevents you from mocking or stubbing a method that does not exist on a
|
||||||
|
# real object. This is generally recommended, and will default to `true` in
|
||||||
|
# RSpec 4.
|
||||||
|
mocks.verify_partial_doubles = true
|
||||||
|
end
|
||||||
|
|
||||||
config.include DeclarationMatchers
|
config.include DeclarationMatchers
|
||||||
|
|
||||||
|
|
|
@ -12,14 +12,12 @@ RSpec::Matchers.define :delegate do |delegated_method|
|
||||||
end
|
end
|
||||||
|
|
||||||
match do |instance|
|
match do |instance|
|
||||||
extend Mocha::API
|
|
||||||
|
|
||||||
@instance = instance
|
@instance = instance
|
||||||
@args ||= []
|
@args ||= []
|
||||||
return_value = 'stubbed return value'
|
return_value = 'stubbed return value'
|
||||||
method_on_target = @method_on_target || delegated_method
|
method_on_target = @method_on_target || delegated_method
|
||||||
stubbed_target = stub('stubbed_target', method_on_target => return_value)
|
stubbed_target = double("stubbed_target", method_on_target => return_value)
|
||||||
@instance.stubs(@target_method => stubbed_target)
|
allow(@instance).to receive(@target_method).and_return stubbed_target
|
||||||
begin
|
begin
|
||||||
@instance.send(delegated_method, *@args) == return_value
|
@instance.send(delegated_method, *@args) == return_value
|
||||||
rescue NoMethodError
|
rescue NoMethodError
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
shared_examples_for "strategy without association support" do
|
shared_examples_for "strategy without association support" do
|
||||||
let(:factory) { stub("associate_factory") }
|
let(:factory) { double("associate_factory") }
|
||||||
let(:attribute) { FactoryGirl::Attribute::Association.new(:user, :user, {}) }
|
let(:attribute) { FactoryGirl::Attribute::Association.new(:user, :user, {}) }
|
||||||
|
|
||||||
def association_named(name, overrides)
|
def association_named(name, overrides)
|
||||||
|
@ -8,9 +8,9 @@ shared_examples_for "strategy without association support" do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
FactoryGirl.stubs(factory_by_name: factory)
|
allow(FactoryGirl).to receive(:factory_by_name).and_return factory
|
||||||
factory.stubs(:compile)
|
allow(factory).to receive(:compile)
|
||||||
factory.stubs(:run)
|
allow(factory).to receive(:run)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns nil when accessing an association" do
|
it "returns nil when accessing an association" do
|
||||||
|
@ -19,7 +19,7 @@ shared_examples_for "strategy without association support" do
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "strategy with association support" do |factory_girl_strategy_name|
|
shared_examples_for "strategy with association support" do |factory_girl_strategy_name|
|
||||||
let(:factory) { stub("associate_factory") }
|
let(:factory) { double("associate_factory") }
|
||||||
|
|
||||||
def association_named(name, strategy, overrides)
|
def association_named(name, strategy, overrides)
|
||||||
runner = FactoryGirl::FactoryRunner.new(name, strategy, [overrides])
|
runner = FactoryGirl::FactoryRunner.new(name, strategy, [overrides])
|
||||||
|
@ -27,9 +27,9 @@ shared_examples_for "strategy with association support" do |factory_girl_strateg
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
FactoryGirl.stubs(factory_by_name: factory)
|
allow(FactoryGirl).to receive(:factory_by_name).and_return factory
|
||||||
factory.stubs(:compile)
|
allow(factory).to receive(:compile)
|
||||||
factory.stubs(:run)
|
allow(factory).to receive(:run)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "runs the factory with the correct overrides" do
|
it "runs the factory with the correct overrides" do
|
||||||
|
@ -44,7 +44,7 @@ shared_examples_for "strategy with association support" do |factory_girl_strateg
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_name|
|
shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_name|
|
||||||
let(:factory) { stub("associate_factory") }
|
let(:factory) { double("associate_factory") }
|
||||||
|
|
||||||
def association_named(name, overrides)
|
def association_named(name, overrides)
|
||||||
runner = FactoryGirl::FactoryRunner.new(name, overrides[:strategy], [overrides.except(:strategy)])
|
runner = FactoryGirl::FactoryRunner.new(name, overrides[:strategy], [overrides.except(:strategy)])
|
||||||
|
@ -52,9 +52,9 @@ shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_n
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
FactoryGirl.stubs(factory_by_name: factory)
|
allow(FactoryGirl).to receive(:factory_by_name).and_return factory
|
||||||
factory.stubs(:compile)
|
allow(factory).to receive(:compile)
|
||||||
factory.stubs(:run)
|
allow(factory).to receive(:run)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "runs the factory with the correct overrides" do
|
it "runs the factory with the correct overrides" do
|
||||||
|
@ -75,7 +75,9 @@ shared_examples_for "strategy with callbacks" do |*callback_names|
|
||||||
end.new
|
end.new
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:evaluation) { stub("evaluation", object: result_instance, notify: true, create: nil) }
|
let(:evaluation) do
|
||||||
|
double("evaluation", object: result_instance, notify: true, create: nil)
|
||||||
|
end
|
||||||
|
|
||||||
it "runs the callbacks #{callback_names} with the evaluation's object" do
|
it "runs the callbacks #{callback_names} with the evaluation's object" do
|
||||||
subject.result(evaluation)
|
subject.result(evaluation)
|
||||||
|
|
Loading…
Reference in a new issue