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 Classes: ContextHookMemoized, NonThreadSafeMemoized, ThreadsafeMemoized

Instance Method Summary collapse

Instance Method Details

#is_expectedObject

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) ⇒ Object

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) ⇒ Object

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

#subjectObject

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