When you find yourself in the situation that you would like to define a custom matcher in your specs, but you do not want to define a global matcher since you need it only for your specific test, there are two ways to do it:
Custom matcher for a single group
If you're only going to include a matcher once, you can also use the 
  matcher macro within an example group
  
    Show archive.org snapshot
  
:
describe "group" do
  
  matcher :be_just_like do |expected|
    match {|actual| actual == expected}
  end
  it "has access to the defined matcher" do
    5.should be_just_like(5)
  end
end
Tip
You can composing a custom matcher from existing matchers to quickly name a group of expectations.
Custom matcher for some groups
If you are planning to re-use a matcher in multiple groups, put it in a module and include it only where you need it.
Since each describe block generates an anonymous class internally, this will include the matcher for this example group only.
require 'rspec/expectations'
module MyHelpers
  extend RSpec::Matchers::DSL
  matcher :be_just_like do |expected|
    match {|actual| actual == expected}
  end
end
describe "group with MyHelpers" do
  include MyHelpers
  it "has access to the defined matcher" do
    5.should be_just_like(5)
  end
end
describe "group without MyHelpers" do
  it "does not have access to the defined matcher" do
    expect do
      5.should be_just_like(5)
    end.to raise_exception
  end
end
Posted to makandra dev (2016-06-05 17:52)