Module: RSpec::Core::MemoizedHelpers

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

Overview

This module is included in ExampleGroup, making the methods available to be called from within example blocks.

See Also:

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#is_expectedvoid

Note:

This only works if you are using rspec-expectations.

Wraps the subject in expect to make it the target of an expectation. Designed to read nicely for one-liners.

Examples:


describe [1, 2, 3] do
  it { is_expected.to be_an Array }
  it { is_expected.not_to include 4 }
end

See Also:

118
119
120
# File 'lib/rspec/core/memoized_helpers.rb', line 118
def is_expected
  expect(subject)
end

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

Note:

This only works if you are using rspec-expectations.

Note:

If you are using RSpec's newer expect-based syntax you may want to use is_expected.to instead of should.

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:

80
81
82
# File 'lib/rspec/core/memoized_helpers.rb', line 80
def should(matcher=nil, message=nil)
  RSpec::Expectations::PositiveExpectationHandler.handle_matcher(subject, matcher, message)
end

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

Note:

This only works if you are using rspec-expectations.

Note:

If you are using RSpec's newer expect-based syntax you may want to use is_expected.to_not instead of should_not.

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:

99
100
101
# File 'lib/rspec/core/memoized_helpers.rb', line 99
def should_not(matcher=nil, message=nil)
  RSpec::Expectations::NegativeExpectationHandler.handle_matcher(subject, matcher, message)
end

#subjectvoid

Note:

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

describe Widget do
  it { is_expected.to validate_presence_of(:name) }
  # or
  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.

Note:

Because subject is designed to create state that is reset between each example, and before(:context) 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(:context) hook.

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 - expectation is set on the subject.
describe Person do
  it { is_expected.to be_eligible_to_vote }
  # or
  it { should be_eligible_to_vote }
end

See Also:

57
58
59
60
61
62
# File 'lib/rspec/core/memoized_helpers.rb', line 57
def subject
  __memoized.fetch_or_store(:subject) do
    described = described_class || self.class..fetch(:description_args).first
    Class === described ? described.new : described
  end
end