Class: RSpec::Core::ExampleGroup

Inherits:
Object
  • Object
show all
Extended by:
Hooks, MemoizedHelpers::ClassMethods, SharedExampleGroup
Includes:
MemoizedHelpers, Pending
Defined in:
lib/rspec/core/example_group.rb

Overview

ExampleGroup and Example are the main structural elements of rspec-core. Consider this example:

describe Thing do
  it "does something" do
  end
end

The object returned by describe Thing is a subclass of ExampleGroup. The object returned by it "does something" is an instance of Example, which serves as a wrapper for an instance of the ExampleGroup in which it is declared.

Example group bodies (e.g. describe or context blocks) are evaluated in the context of a new subclass of ExampleGroup. Individual examples are evalutaed in the context of an instance of the specific ExampleGroup subclass to which they belong.

Besides the class methods defined here, there are other interesting macros defined in Hooks, MemoizedHelpers::ClassMethods and SharedExampleGroup. There are additional instance methods available to your examples defined in MemoizedHelpers and Pending.

Constant Summary

Metadata (collapse)

Defining Examples (collapse)

Defining Example Groups (collapse)

Including Shared Example Groups (collapse)

Class Method Summary (collapse)

Methods included from SharedExampleGroup

shared_examples

Methods included from MemoizedHelpers::ClassMethods

let, let!, subject, subject!

Methods included from Hooks

after, append_after, around, before, prepend_before

Methods included from Pending

#pending, #skip

Methods included from MemoizedHelpers

#is_expected, #should, #should_not, #subject

Class Method Details

+ (void) context { ... }

An alias of example_group. Generally used when grouping examples contextually (e.g. "with xyz", "when xyz" or "if xyz"). Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  context "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

See Also:

249
# File 'lib/rspec/core/example_group.rb', line 249
define_example_group_method :context

+ (void) describe { ... }

An alias of example_group. Generally used when grouping examples by a thing you are describing (e.g. an object, class or method). Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  describe "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

See Also:

244
# File 'lib/rspec/core/example_group.rb', line 244
define_example_group_method :describe

+ (String) description

Returns the current example group description

Returns:

  • (String)

    the current example group description

64
65
66
67
# File 'lib/rspec/core/example_group.rb', line 64
def self.description
  description = [:description]
  RSpec.configuration.format_docstrings_block.call(description)
end

+ (void) example {|Example| ... }

Defines an example within a group.

Examples:

example do
end
example "does something" do
end
example "does something", :with => 'additional metadata' do
end
example "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

131
# File 'lib/rspec/core/example_group.rb', line 131
define_example_method :example

+ (void) example_group { ... }

Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  example_group "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

239
# File 'lib/rspec/core/example_group.rb', line 239
define_example_group_method :example_group

+ (void) fcontext { ... }

Shortcut to define an example group with :focus => true. Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  fcontext "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

See Also:

265
# File 'lib/rspec/core/example_group.rb', line 265
define_example_group_method :fcontext,  :focus => true

+ (void) fdescribe { ... }

Shortcut to define an example group with :focus => true. Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  fdescribe "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

See Also:

261
# File 'lib/rspec/core/example_group.rb', line 261
define_example_group_method :fdescribe, :focus => true

+ (void) fexample {|Example| ... }

Shortcut to define an example with :focus => true

Examples:

fexample do
end
fexample "does something" do
end
fexample "does something", :with => 'additional metadata' do
end
fexample "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

150
# File 'lib/rspec/core/example_group.rb', line 150
define_example_method :fexample, :focus => true

+ (void) fit {|Example| ... }

Shortcut to define an example with :focus => true

Examples:

fit do
end
fit "does something" do
end
fit "does something", :with => 'additional metadata' do
end
fit "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

153
# File 'lib/rspec/core/example_group.rb', line 153
define_example_method :fit,      :focus => true

+ (void) focus {|Example| ... }

Shortcut to define an example with :focus => true

Examples:

focus do
end
focus "does something" do
end
focus "does something", :with => 'additional metadata' do
end
focus "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

147
# File 'lib/rspec/core/example_group.rb', line 147
define_example_method :focus,    :focus => true

+ (void) fspecify {|Example| ... }

Shortcut to define an example with :focus => true

Examples:

fspecify do
end
fspecify "does something" do
end
fspecify "does something", :with => 'additional metadata' do
end
fspecify "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

156
# File 'lib/rspec/core/example_group.rb', line 156
define_example_method :fspecify, :focus => true

+ (void) include_context(name, *args, &block)

Includes shared content mapped to name directly in the group in which it is declared, as opposed to it_behaves_like, which creates a nested group. If given a block, that block is also eval'd in the current context.

See Also:

301
302
303
# File 'lib/rspec/core/example_group.rb', line 301
def self.include_context(name, *args, &block)
  find_and_eval_shared("context", name, *args, &block)
end

+ (void) include_examples(name, *args, &block)

Includes shared content mapped to name directly in the group in which it is declared, as opposed to it_behaves_like, which creates a nested group. If given a block, that block is also eval'd in the current context.

See Also:

310
311
312
# File 'lib/rspec/core/example_group.rb', line 310
def self.include_examples(name, *args, &block)
  find_and_eval_shared("examples", name, *args, &block)
end

+ (void) it {|Example| ... }

Defines an example within a group. This is the primary API to define a code example.

Examples:

it do
end
it "does something" do
end
it "does something", :with => 'additional metadata' do
end
it "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

134
# File 'lib/rspec/core/example_group.rb', line 134
define_example_method :it

+ (void) it_behaves_like

Generates a nested example group and includes the shared content mapped to name in the nested group.

See Also:

291
# File 'lib/rspec/core/example_group.rb', line 291
define_nested_shared_group_method :it_behaves_like, "behaves like"

+ (void) it_should_behave_like

Generates a nested example group and includes the shared content mapped to name in the nested group.

See Also:

294
# File 'lib/rspec/core/example_group.rb', line 294
define_nested_shared_group_method :it_should_behave_like

+ (void) metadata

The Metadata object associated with this group.

See Also:

44
45
46
# File 'lib/rspec/core/example_group.rb', line 44
def self.
  @metadata if defined?(@metadata)
end

+ (void) pending {|Example| ... }

Shortcut to define an example with :pending => true

Examples:

pending do
end
pending "does something" do
end
pending "does something", :with => 'additional metadata' do
end
pending "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

171
# File 'lib/rspec/core/example_group.rb', line 171
define_example_method :pending,  :pending => true

+ (void) run(reporter)

Runs all the examples in this group

448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
# File 'lib/rspec/core/example_group.rb', line 448
def self.run(reporter)
  if RSpec.world.wants_to_quit
    RSpec.world.clear_remaining_example_groups if top_level?
    return
  end
  reporter.example_group_started(self)
  begin
    run_before_context_hooks(new)
    result_for_this_group = run_examples(reporter)
    results_for_descendants = ordering_strategy.order(children).map { |child| child.run(reporter) }.all?
    result_for_this_group && results_for_descendants
  rescue Pending::SkipDeclaredInExample => ex
    for_filtered_examples(reporter) {|example| example.skip_with_exception(reporter, ex) }
  rescue Exception => ex
    RSpec.world.wants_to_quit = true if fail_fast?
    for_filtered_examples(reporter) {|example| example.fail_with_exception(reporter, ex) }
  ensure
    run_after_context_hooks(new)
    before_context_ivars.clear
    reporter.example_group_finished(self)
  end
end

+ (void) skip {|Example| ... }

Shortcut to define an example with :skip => true

Examples:

skip do
end
skip "does something" do
end
skip "does something", :with => 'additional metadata' do
end
skip "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

168
# File 'lib/rspec/core/example_group.rb', line 168
define_example_method :skip,     :skip => true

+ (void) specify {|Example| ... }

Defines an example within a group. Useful for when your docstring does not read well off of it.

Examples:

RSpec.describe MyClass do
  specify "#do_something is deprecated" do
    # ...
  end
end
specify do
end
specify "does something" do
end
specify "does something", :with => 'additional metadata' do
end
specify "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

143
# File 'lib/rspec/core/example_group.rb', line 143
define_example_method :specify

+ (void) xcontext { ... }

Shortcut to temporarily make an example group skipped. Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  xcontext "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

See Also:

257
# File 'lib/rspec/core/example_group.rb', line 257
define_example_group_method :xcontext,  :skip => "Temporarily skipped with xcontext"

+ (void) xdescribe { ... }

Shortcut to temporarily make an example group skipped. Generates a subclass of this example group which inherits everything except the examples themselves.

Examples:


RSpec.describe "something" do # << This describe method is defined in
                              # << RSpec::Core::DSL, included in the
                              # << global namespace (optional)
  before do
    do_something_before
  end
  let(:thing) { Thing.new }
  xdescribe "attribute (of something)" do
    # examples in the group get the before hook
    # declared above, and can access `thing`
  end
end

Parameters:

  • name (String)

    The example group doc string

  • metadata (Hash)

    Additional metadata to attach to the example group

Yields:

  • The example group definition

See Also:

253
# File 'lib/rspec/core/example_group.rb', line 253
define_example_group_method :xdescribe, :skip => "Temporarily skipped with xdescribe"

+ (void) xexample {|Example| ... }

Shortcut to define an example with :skip => 'Temporarily skipped with xexample'

Examples:

xexample do
end
xexample "does something" do
end
xexample "does something", :with => 'additional metadata' do
end
xexample "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

159
# File 'lib/rspec/core/example_group.rb', line 159
define_example_method :xexample, :skip => 'Temporarily skipped with xexample'

+ (void) xit {|Example| ... }

Shortcut to define an example with :skip => 'Temporarily skipped with xit'

Examples:

xit do
end
xit "does something" do
end
xit "does something", :with => 'additional metadata' do
end
xit "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

162
# File 'lib/rspec/core/example_group.rb', line 162
define_example_method :xit,      :skip => 'Temporarily skipped with xit'

+ (void) xspecify {|Example| ... }

Shortcut to define an example with :skip => 'Temporarily skipped with xspecify'

Examples:

xspecify do
end
xspecify "does something" do
end
xspecify "does something", :with => 'additional metadata' do
end
xspecify "does something" do |ex|
  # ex is the Example object that contains metadata about the example
end

Parameters:

  • name (String)
  • extra_options (Hash)
  • implementation (Block)

Yields:

See Also:

165
# File 'lib/rspec/core/example_group.rb', line 165
define_example_method :xspecify, :skip => 'Temporarily skipped with xspecify'

Instance Method Details

- (void) described_class

Returns the class or module passed to the describe method (or alias). Returns nil if the subject is not a class or module.

Examples:

describe Thing do
  it "does something" do
    described_class == Thing
  end
end
79
80
81
# File 'lib/rspec/core/example_group.rb', line 79
def described_class
  self.class.described_class
end