spec/unit/container_spec.rb in spank-0.0.1 vs spec/unit/container_spec.rb in spank-0.0.2
- old
+ new
@@ -4,73 +4,83 @@
describe Container do
let(:sut) { Container.new }
describe "when resolving an item that has been registered" do
let(:registered_item) { Object.new }
+
before :each do
sut.register(:item) do
registered_item
end
end
- before :each do
- @result = sut.resolve(:item)
- end
+
+ let(:result) { sut.resolve(:item) }
+
it "should return the registered item" do
- @result.should == registered_item
+ result.should == registered_item
end
end
+
describe "when resolving the container" do
it "should return itself" do
sut.resolve(:container).should == sut
end
end
+
describe "when multiple items are registered with the same key" do
let(:jeans) { fake }
let(:dress_pants) { fake }
+
before :each do
sut.register(:pants) { jeans }
sut.register(:pants) { dress_pants }
end
+
context "when resolving a single item" do
- before :each do
- @result = sut.resolve(:pants)
- end
+ let(:result) { sut.resolve(:pants) }
+
it "should return the first one registered" do
- @result.should == jeans
+ result.should == jeans
end
end
+
context "when resolving all items" do
- before :each do
- @results = sut.resolve_all(:pants)
- end
+ let(:results) { sut.resolve_all(:pants) }
+
it "should return them all" do
- @results.should == [jeans, dress_pants]
+ results.should == [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
end
end
end
+
context "when a component is registered as a singleton" do
before :each do
sut.register(:singleton) { fake }.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)
end
end
+
context "when invoking the factory method" do
before :each do
sut.register(:item){ |item| @result = item }
sut.resolve(:item)
end
+
it "should pass the container through to the block" do
@result.should == sut
end
end
+
context "when automatically resolving dependencies" do
class Child
def initialize(mom,dad)
end
def greeting(message)
@@ -78,39 +88,45 @@
end
context "when the dependencies have been registered" do
let(:mom) { fake }
let(:dad) { fake }
+
before :each do
sut.register(:mom) { mom }
sut.register(:dad) { dad }
end
+
it "should be able to glue the pieces together automatically" do
sut.build(Child).should be_a_kind_of(Child)
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)
end
end
end
+
context "when registering an interceptor" do
class TestInterceptor
attr_reader :called
def intercept(invocation)
@called = true
invocation.proceed
end
end
+
class TestCommand
attr_reader :called, :received
def run(input)
@called = true
@received = input
end
end
+
let(:command) { TestCommand.new }
let(:interceptor) { TestInterceptor.new }
before :each do
sut.register(:command) { command }.intercept(:run).with(interceptor)
@@ -120,10 +136,9 @@
it "should allow the interceptor to intercept calls to the target" do
interceptor.called.should be_true
end
it "should forward the args to the command" do
- #command.should have_received(:run, 'hi')
command.called.should be_true
command.received.should == ['hi']
end
end
end