Module: RSpec::Core::Subject::ExampleMethods

Included in:
ExampleGroup
Defined in:
lib/rspec/core/subject.rb

Instance Method Summary collapse

Instance Method Details

#should(matcher = nil, message = nil) ⇒ Object

When should is called with no explicit receiver, the call is delegated to the object returned by subject. Combined with an implicit subject this supports very concise expressions.

Examples:


describe Person do
  it { should be_eligible_to_vote }
end

See Also:



63
64
65
# File 'lib/rspec/core/subject.rb', line 63

def should(matcher=nil, message=nil)
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(subject, matcher, message)
end

#should_not(matcher = nil, message = nil) ⇒ Object

Just like should, should_not delegates to the subject (implicit or explicit) of the example group.

Examples:


describe Person do
  it { should_not be_eligible_to_vote }
end

See Also:



77
78
79
# File 'lib/rspec/core/subject.rb', line 77

def should_not(matcher=nil, message=nil)
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(subject, matcher, message)
end

#subjectObject

Note:

subject was contributed by Joe Ferris to support the one-liner syntax embraced by shoulda matchers:

describe Widget do
  it { should validate_presence_of(:name) }
end

While the examples below demonstrate how to use subject explicitly in examples, we recommend that you define a method with an intention revealing name instead.

Returns the example group's subject.

Examples:


# explicit declaration of subject
describe Person do
  subject { Person.new(:birthdate => 19.years.ago) }
  it "should be eligible to vote" do
    subject.should be_eligible_to_vote
    # ^ ^ explicit reference to subject not recommended
  end
end

# implicit subject => { Person.new }
describe Person do
  it "should be eligible to vote" do
    subject.should be_eligible_to_vote
    # ^ ^ explicit reference to subject not recommended
  end
end

# one-liner syntax - should is invoked on subject
describe Person do
  it { should be_eligible_to_vote }
end

See Also:



44
45
46
47
48
49
50
# File 'lib/rspec/core/subject.rb', line 44

def subject
  if defined?(@original_subject)
    @original_subject
  else
    @original_subject = instance_eval(&self.class.subject)
  end
end