Sha256: 28bb0ebac4d4b9b048e4ac4acac1edb724556462013f29ac6344e7f78400f6f7

Contents?: true

Size: 1.8 KB

Versions: 12

Compression:

Stored size: 1.8 KB

Contents

##
# spec/lib/skn_utils/container_spec.rb
#
#  @See SknRegistry also

class MyKlassService
  def value
    true
  end
end



describe SknContainer, "IoC Lite Container Singleton." do

  context "Operational Features. " do

    it "#register accepts a proc object to produce unique instances. " do
      val = subject.register(:service, -> {MyKlassService.new} )
      expect( val ).to eq subject
    end

    it "#resolve returns new instances. " do
      subject.register(:service, -> {MyKlassService.new} )
      val_a = subject.resolve(:service)
      val_b = subject.resolve(:service)

      expect( val_a ).to be_instance_of MyKlassService
      expect( val_a ).to_not be_equal val_b
    end

    it "#register accepts a class object and return self to enable chaining. " do
      val = subject.register(:service_k, MyKlassService).register(:more, "More")
      expect( val ).to eq subject
    end

    it "#resolve returns class value. " do
      subject.register(:service_k, MyKlassService)
      val = subject.resolve(:service_k)

      expect( val ).to be_equal MyKlassService
      expect( val.new.value ).to be true
    end

    it "#resolve returns the same object value. " do
      thingy = MyKlassService.new
      subject.register(:service_k, thingy)
      val_a = subject.resolve(:service_k)
      val_b = subject.resolve(:service_k)

      expect( val_a ).to be_equal thingy
      expect( val_a ).to be_equal val_b
    end

    it "#resolve returns nil when key is not found. " do
      subject.register(:service_a, "AnyValue")
      expect(subject.resolve(:no_find)).to be_nil
    end

    it "#resolve returns block without calling it first. " do
      subject.register(:service_b, {call: false}) do |str|
        str.upcase
      end

      expect( subject.resolve(:service_b).call("Hello") ).to eq "HELLO"
    end
  end

end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
skn_utils-5.8.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.7.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.6.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.5.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.4.1 spec/lib/skn_utils/container_spec.rb
skn_utils-5.4.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.3.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.2.0 spec/lib/skn_utils/container_spec.rb
skn_utils-5.1.3 spec/lib/skn_utils/container_spec.rb
skn_utils-5.1.2 spec/lib/skn_utils/container_spec.rb
skn_utils-5.1.1 spec/lib/skn_utils/container_spec.rb
skn_utils-5.1.0 spec/lib/skn_utils/container_spec.rb