match matcher

The match matcher calls #match on the object, passing if #match returns a truthy (not false or nil) value. Regexp and String both provide a #match method.

  expect("a string").to match(/str/) # passes
  expect("a string").to match(/foo/) # fails
  expect(/foo/).to match("food")     # passes
  expect(/foo/).to match("drinks")   # fails

You can also use this matcher to match nested data structures when composing matchers.

String usage

Given a file named “stringmatchspec.rb” with:

RSpec.describe "a string" do
  it { is_expected.to match(/str/) }
  it { is_expected.not_to match(/foo/) }

  # deliberate failures
  it { is_expected.not_to match(/str/) }
  it { is_expected.to match(/foo/) }
end

When I run rspec string_match_spec.rb

Then the output should contain all of these:

4 examples, 2 failures
expected “a string” not to match /str/
expected “a string” to match /foo/

Regular expression usage

Given a file named “regexpmatchspec.rb” with:

RSpec.describe /foo/ do
  it { is_expected.to match("food") }
  it { is_expected.not_to match("drinks") }

  # deliberate failures
  it { is_expected.not_to match("food") }
  it { is_expected.to match("drinks") }
end

When I run rspec regexp_match_spec.rb

Then the output should contain all of these:

4 examples, 2 failures
expected /foo/ not to match “food”
expected /foo/ to match “drinks”