require "rspec/autorun" ## A puddle of ducks class AuthenticDuck def squeeze "quack" end end class GeezerDuck def squeeze "OI! I'M QUACKING HERE" end end class BrokenDuck # Oops no squeeze end ### Shared examples can describe & enforce a consistent interface RSpec.shared_examples "quacks like a duck" do it "can be squeezed" do expect(subject).to respond_to :squeeze expect(subject.squeeze).to match(/quack/i) end end RSpec.describe AuthenticDuck do include_examples "quacks like a duck" end RSpec.describe GeezerDuck do include_examples "quacks like a duck" end RSpec.describe BrokenDuck do include_examples "quacks like a duck" end