Method: RSpec::Core::SharedExampleGroup#shared_examples

Defined in:
lib/rspec/core/shared_example_group.rb

#shared_examples(name, &block) ⇒ void #shared_examples(name, metadata, &block) ⇒ void Also known as: shared_context, shared_examples_for

Stores the block for later use. The block will be evaluated in the context of an example group via include_examples, include_context, or it_behaves_like.

Examples:

shared_examples "auditable" do
  it "stores an audit record on save!" do
    expect { auditable.save! }.to change(Audit, :count).by(1)
  end
end

RSpec.describe Account do
  it_behaves_like "auditable" do
    let(:auditable) { Account.new }
  end
end

Overloads:

  • #shared_examples(name, &block) ⇒ void

    Parameters:

    • name (String, Symbol, Module)

      identifer to use when looking up this shared group

    • block

      The block to be eval'd

  • #shared_examples(name, metadata, &block) ⇒ void

    Parameters:

    • name (String, Symbol, Module)

      identifer to use when looking up this shared group

    • metadata (Array<Symbol>, Hash)

      metadata to attach to this group; any example group or example with matching metadata will automatically include this shared example group.

    • block

      The block to be eval'd

See Also:

[View source]

90
91
92
93
94
95
96
97
98
99
# File 'lib/rspec/core/shared_example_group.rb', line 90

def shared_examples(name, *args, &block)
  top_level = self == ExampleGroup
  if top_level && RSpec::Support.thread_local_data[:in_example_group]
    raise "Creating isolated shared examples from within a context is " \
          "not allowed. Remove `RSpec.` prefix or move this to a " \
          "top-level scope."
  end

  RSpec.world.shared_example_group_registry.add(self, name, *args, &block)
end