spec/unit/container_spec.rb in spank-0.0.1393558686 vs spec/unit/container_spec.rb in spank-1.0.1420314444

- old
+ new

@@ -1,111 +1,109 @@ -require "spec_helper" - module Spank describe Container do - let(:sut) { Container.new } + subject { Container.new } describe "when resolving an item that has been registered" do let(:registered_item) { Object.new } before :each do - sut.register(:item) do + subject.register(:item) do registered_item end end - let(:result) { sut.resolve(:item) } - - it "should return the registered item" do - result.should == registered_item + it "returns the registered item" do + expect(subject.resolve(:item)).to eql(registered_item) end end describe "when resolving the container" do - it "should return itself" do - sut.resolve(:container).should == sut + it "returns itself" do + expect(subject.resolve(:container)).to eql(subject) end end describe "when multiple items are registered with the same key" do let(:jeans) { double("jeans") } let(:dress_pants) { double("dress pants") } before :each do - sut.register(:pants) { jeans } - sut.register(:pants) { dress_pants } + subject.register(:pants) { jeans } + subject.register(:pants) { dress_pants } end context "when resolving a single item" do - let(:result) { sut.resolve(:pants) } - - it "should return the first one registered" do - result.should == jeans + it "returns the first one registered" do + expect(subject.resolve(:pants)).to eql(jeans) end end context "when resolving all items" do - let(:results) { sut.resolve_all(:pants) } - - it "should return them all" do - results.should == [jeans, dress_pants] + it "returns them all" do + results = subject.resolve_all(:pants) + expect(results).to match_array([jeans, dress_pants]) end end context "when resolving all items for an unknown key" do - it "should return an empty array" do - sut.resolve_all(:shirts).should be_empty + it "returns an empty array" do + expect(subject.resolve_all(:shirts)).to be_empty end end end context "when a component is registered as a singleton" do before :each do - sut.register(:singleton) { Object.new }.as_singleton + subject.register(:singleton) { Object.new }.as_singleton end - it "should return the same instance of that component each time it is resolved" do - sut.resolve(:singleton).should == sut.resolve(:singleton) + it "returns the same instance of the component every time" do + expect(subject.resolve(:singleton)).to eql(subject.resolve(:singleton)) end end context "when invoking the factory method" do - before :each do - sut.register(:item){ |item| @result = item } - sut.resolve(:item) + it "passes the container through to the block" do + result = nil + subject.register(:item) { |item| result = item } + subject.resolve(:item) + expect(result).to eql(subject) end - - it "should pass the container through to the block" do - @result.should == sut - end end context "when automatically resolving dependencies" do class Child + attr_reader :mom, :dad + def initialize(mom,dad) + @mom = mom + @dad = dad end def greeting(message) end end context "when the dependencies have been registered" do let(:mom) { double("mom") } let(:dad) { double("dad") } before :each do - sut.register(:mom) { mom } - sut.register(:dad) { dad } + subject.register(:mom) { mom } + subject.register(:dad) { dad } end - it "should be able to glue the pieces together automatically" do - sut.build(Child).should be_a_kind_of(Child) + it "glues the pieces together automatically" do + child = subject.build(Child) + expect(child).to be_a_kind_of(Child) + expect(child.mom).to eql(mom) + expect(child.dad).to eql(dad) end end context "when a component cannot automatically be constructed" do - it "should raise an error" do - expect { sut.build(Child) }.to raise_error(ContainerError) + it "raises an error" do + expect { subject.build(Child) }.to raise_error(ContainerError) end end end context "when registering interceptors" do @@ -132,25 +130,29 @@ let(:command) { TestCommand.new } let(:interceptor) { TestInterceptor.new("first") } let(:other_interceptor) { TestInterceptor.new("second") } before :each do - sut.register(:command) { command }.intercept(:run).with(interceptor).and(other_interceptor) - sut.register(:single_command) { command }.intercept(:run).with(interceptor) - sut.resolve(:command).run("hi") + subject. + register(:command) { command }. + intercept(:run).with(interceptor).and(other_interceptor) + subject. + register(:single_command) { command }. + intercept(:run).with(interceptor) + subject.resolve(:command).run("hi") end - it "should allow the first interceptor to intercept calls to the target" do - interceptor.called.should be_true + it "allows the first interceptor to intercept calls to the target" do + expect(interceptor.called).to be_truthy end - it "should allow the second interceptor to intercept calls to the target" do - other_interceptor.called.should be_true + it "allows the second interceptor to intercept calls to the target" do + expect(other_interceptor.called).to be_truthy end - it "should forward the args to the command" do - command.called.should be_true - command.received.should == ['hi'] + it "forwards the args to the command" do + expect(command.called).to be_truthy + expect(command.received).to match_array(["hi"]) end end end end