DanielBlanco
1/4/2012 - 2:12 PM

MiniTest shared examples

MiniTest shared examples

gem 'minitest'
require 'minitest/spec'
require 'minitest/autorun'

MiniTest::Spec.class_eval do
  def self.shared_examples
    @shared_examples ||= {}
  end
end

module MiniTest::Spec::SharedExamples
  def shared_examples_for(desc, &block)
    MiniTest::Spec.shared_examples[desc] = block
  end

  def it_behaves_like(desc)
    self.instance_eval(&MiniTest::Spec.shared_examples[desc])
  end
end

Object.class_eval { include(MiniTest::Spec::SharedExamples) }
require 'test_helper'

describe Redis do
  before do
    @adapter = Redis.new('redis://127.0.0.1:6379')
  end

  after do
    @adapter.clear
  end

  it_behaves_like 'An Adapter'

  describe '#to_s' do
    it 'returns the name' do
      @adapter.to_s.must_equal('Redis')
    end
  end
end
require 'test_helper'

describe Memory do
  before do
    @adapter = Memory.new('memory://127.0.0.1')
  end

  after do
    @adapter.clear
  end

  it_behaves_like 'An Adapter'

  describe '#to_s' do
    it 'returns the name' do
      @adapter.to_s.must_equal('Memory')
    end
  end
end
require 'test_helper'

shared_examples_for 'An Adapter' do
  describe '#read' do
    before do
      @adapter.write(@key = 'whiskey', @value = "Jameson's")
    end

    it 'reads a given key' do
      @adapter.read(@key).must_equal(@value)
    end
  end
end