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.
@example
describe Person do it { should be_eligible_to_vote } end
# 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
Just like should
, should_not
delegates to the
subject (implicit or explicit) of the example group.
@example
describe Person do it { should_not be_eligible_to_vote } end
# 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
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.
@example
# 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
# File lib/rspec/core/subject.rb, line 30 def subject if defined?(@original_subject) @original_subject else @original_subject = instance_eval(&self.class.subject) end end