Module: RSpec::Expectations
Overview
Expectations provides a simple, readable API to express the expected outcomes in a code example. To express an expected outcome, wrap an object or block in expect, call to or to_not (aliased as not_to) and pass it a matcher object:
expect(order.total).to eq(Money.new(5.55, :USD))
expect(list).to include(user)
expect().not_to match(/foo/)
expect { do_something }.to raise_error
The last form (the block form) is needed to match against ruby constructs that are not objects, but can only be observed when executing a block of code. This includes raising errors, throwing symbols, yielding, and changing values.
When ‘expect(…).to` is invoked with a matcher, it turns around and calls `matcher.matches?(<object wrapped by expect>)`. For example, in the expression:
expect(order.total).to eq(Money.new(5.55, :USD))
…‘eq(Money.new(5.55, :USD))` returns a matcher object, and it results in the equivalent of eq.matches?(order.total). If matches? returns true, the expectation is met and execution continues. If false, then the spec fails with the message returned by eq.failure_message.
Given the expression:
expect(order.entries).not_to include(entry)
…the not_to method (also available as to_not) invokes the equivalent of ‘include.matches?(order.entries)`, but it interprets false as success, and true as a failure, using the message generated by include.failure_message_when_negated.
rspec-expectations ships with a standard set of useful matchers, and writing your own matchers is quite simple.
See [RSpec::Matchers](../RSpec/Matchers) for more information about the built-in matchers that ship with rspec-expectations, and how to write your own custom matchers.
Constant Summary
-
LegacyMacherAdapter =
Internal use only
# File 'rspec-expectations/lib/rspec/expectations/handler.rb', line 179Deprecated.
Use LegacyMatcherAdapter instead.
::RSpec3.0 was released with the class name misspelled. For SemVer compatibility, we will provide this misspelled alias until 4.0.LegacyMatcherAdapter
Class Method Summary
-
.configuration ⇒ RSpec::Expectations::Configuration
The configuration object.
- .differ Internal use only Internal use only
-
.fail_with(message, expected = nil, actual = nil)
Raises an RSpec::Expectations::ExpectationNotMetError with message.
Class Method Details
.configuration ⇒ RSpec::Expectations::Configuration
The configuration object.
# File 'rspec-expectations/lib/rspec/expectations/configuration.rb', line 228
def self.configuration @configuration ||= Configuration.new end
.differ
# File 'rspec-expectations/lib/rspec/expectations/fail_with.rb', line 13
def differ RSpec::Support::Differ.new( :object_preparer => Differ::OBJECT_PREPARER, :color => RSpec::Matchers.configuration.color? ) end
.fail_with(message, expected = nil, actual = nil)
Raises an RSpec::Expectations::ExpectationNotMetError with message. Adds a diff to the failure message when expected and actual are both present.
# File 'rspec-expectations/lib/rspec/expectations/fail_with.rb', line 27
def fail_with(, expected=nil, actual=nil) unless raise ArgumentError, "Failure message is nil. Does your matcher define the " \ "appropriate failure_message[_when_negated] method to return a string?" end = ::RSpec::Matchers::MultiMatcherDiff.from(expected, actual).(, differ) RSpec::Support.notify_failure(RSpec::Expectations::ExpectationNotMetError.new ) end