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.
@example
describe Person do it { should be_eligible_to_vote } end
@see subject
# File lib/rspec/core/memoized_helpers.rb, line 67 def should(matcher=nil, message=nil) RSpec::Expectations::PositiveExpectationHandler.handle_matcher(subject, 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
@see subject
# File lib/rspec/core/memoized_helpers.rb, line 81 def should_not(matcher=nil, message=nil) RSpec::Expectations::NegativeExpectationHandler.handle_matcher(subject, matcher, message) end
@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.
@example
# 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
@note Because `subject` is designed to create state that is reset between
each example, and `before(:all)` is designed to setup state that is shared across _all_ examples in an example group, `subject` is _not_ intended to be used in a `before(:all)` hook. RSpec 2.13.1 prints a warning when you reference a `subject` from `before(:all)` and we plan to have it raise an error in RSpec 3.
@see should
# File lib/rspec/core/memoized_helpers.rb, line 47 def subject __memoized.fetch(:subject) do __memoized[:subject] = begin described = described_class || self.class.description Class === described ? described.new : described end end end
Generated with the Darkfish Rdoc Generator 2.