Module: Spec::Expectations

Defined in:
lib/spec/expectations.rb,
lib/spec/expectations/errors.rb,
lib/spec/expectations/handler.rb,
lib/spec/expectations/differs/default.rb,
lib/spec/expectations/extensions/object.rb

Overview

Spec::Expectations lets you set expectations on your objects.

result.should == 37
team.should have(11).players_on_the_field

How Expectations work.

Spec::Expectations adds two methods to Object:

should(matcher=nil)
should_not(matcher=nil)

Both methods take an optional Expression Matcher (See Spec::Matchers).

When should receives an Expression Matcher, it calls matches?(self). If it returns true, the spec passes and execution continues. If it returns false, then the spec fails with the message returned by matcher.failure_message.

Similarly, when should_not receives a matcher, it calls matches?(self). If it returns false, the spec passes and execution continues. If it returns true, then the spec fails with the message returned by matcher.negative_failure_message.

RSpec ships with a standard set of useful matchers, and writing your own matchers is quite simple. See Spec::Matchers for details.

Defined Under Namespace

Modules: Differs, ObjectExpectations Classes: ExpectationMatcherHandler, ExpectationNotMetError, InvalidMatcherError, NegativeExpectationMatcherHandler

Class Method Summary collapse

Class Method Details

.differObject



33
34
35
# File 'lib/spec/expectations.rb', line 33

def self.differ
  @differ
end

.differ=(differ) ⇒ Object



37
38
39
# File 'lib/spec/expectations.rb', line 37

def self.differ=(differ)
  @differ = differ
end

.fail_with(message, expected = nil, target = nil) ⇒ Object

raises a Spec::Expectations::ExpectationNotMetError with message

When a differ has been assigned and fail_with is passed expected and target, passes them to the differ to append a diff message to the failure message.



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/spec/expectations.rb', line 46

def self.fail_with(message, expected=nil, target=nil) # :nodoc:
  if (Array === message) & (message.length == 3)
    message, expected, target = message[0], message[1], message[2]
  end
  unless (differ.nil? || expected.nil? || target.nil?)
    if expected.is_a?(String)
      message << "\nDiff:" << self.differ.diff_as_string(target.to_s, expected)
    elsif !target.is_a?(Proc)
      message << "\nDiff:" << self.differ.diff_as_object(target, expected)
    end
  end
  Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
end