Module: RSpec::Core::Subject

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

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(kls) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/rspec/core/subject.rb', line 7

def self.included(kls)
  kls.class_eval do
    extend ClassMethods
    alias_method :__should_for_example_group__,     :should
    alias_method :__should_not_for_example_group__, :should_not
  end
end

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 (see subject), this supports very concise expressions.

Examples

describe Person do
  it { should be_eligible_to_vote }
end


53
54
55
# File 'lib/rspec/core/subject.rb', line 53

def should(matcher=nil, message=nil)
  self == subject ? self.__should_for_example_group__(matcher) : subject.should(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


65
66
67
# File 'lib/rspec/core/subject.rb', line 65

def should_not(matcher=nil, message=nil)
  self == subject ? self.__should_not_for_example_group__(matcher) : subject.should_not(matcher,message)
end

#subjectObject

Returns the subject defined by the example group. The subject block is only executed once per example, the result of which is cached and returned by any subsequent calls to subject.

If a class is passed to describe and no subject is explicitly declared in the example group, then subject will return a new instance of that class.

Examples

# explicit subject defined by the subject method
describe Person do
  subject { Person.new(:birthdate => 19.years.ago) }
  it "should be eligible to vote" do
    subject.should be_eligible_to_vote
  end
end

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


39
40
41
# File 'lib/rspec/core/subject.rb', line 39

def subject
  @original_subject ||= instance_eval(&self.class.subject)
end