Class: RSpec::Core::ExampleGroup
- Inherits:
-
Object
- Object
- RSpec::Core::ExampleGroup
- 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
evaluated 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
- WrongScopeError =
Raised when an RSpec API is called in the wrong scope, such as
before
being called from within an example rather than from within an example group block. Class.new(NoMethodError)
Metadata (collapse)
-
+ (String) description
The current example group description.
-
+ (void) metadata
The Metadata object associated with this group.
-
- (void) described_class
Returns the class or module passed to the
describe
method (or alias).
Defining Examples (collapse)
-
+ (void) example {|Example| ... }
Defines an example within a group.
-
+ (void) fexample {|Example| ... }
Shortcut to define an example with
:focus => true
. -
+ (void) fit {|Example| ... }
Shortcut to define an example with
:focus => true
. -
+ (void) focus {|Example| ... }
Shortcut to define an example with
:focus => true
. -
+ (void) fspecify {|Example| ... }
Shortcut to define an example with
:focus => true
. -
+ (void) it {|Example| ... }
Defines an example within a group.
-
+ (void) pending {|Example| ... }
Shortcut to define an example with
:pending => true
. -
+ (void) skip {|Example| ... }
Shortcut to define an example with
:skip => true
. -
+ (void) specify {|Example| ... }
Defines an example within a group.
-
+ (void) xexample {|Example| ... }
Shortcut to define an example with
:skip => 'Temporarily skipped with xexample'
. -
+ (void) xit {|Example| ... }
Shortcut to define an example with
:skip => 'Temporarily skipped with xit'
. -
+ (void) xspecify {|Example| ... }
Shortcut to define an example with
:skip => 'Temporarily skipped with xspecify'
.
Defining Example Groups (collapse)
-
+ (void) context
An alias of
example_group
. -
+ (void) describe
An alias of
example_group
. -
+ (void) example_group
Generates a subclass of this example group which inherits everything except the examples themselves.
-
+ (void) fcontext
Shortcut to define an example group with
:focus => true
. -
+ (void) fdescribe
Shortcut to define an example group with
:focus => true
. -
+ (void) xcontext
Shortcut to temporarily make an example group skipped.
-
+ (void) xdescribe
Shortcut to temporarily make an example group skipped.
Including Shared Example Groups (collapse)
-
+ (void) add_example(example)
Adds an example to the example group.
-
+ (void) include_context(name, *args, &block)
Includes shared content mapped to
name
directly in the group in which it is declared, as opposed toit_behaves_like
, which creates a nested group. -
+ (void) include_examples(name, *args, &block)
Includes shared content mapped to
name
directly in the group in which it is declared, as opposed toit_behaves_like
, which creates a nested group. -
+ (void) it_behaves_like
Generates a nested example group and includes the shared content mapped to
name
in the nested group. -
+ (void) it_should_behave_like
Generates a nested example group and includes the shared content mapped to
name
in the nested group. -
+ (void) remove_example(example)
Removes an example from the example group.
Class Method Summary (collapse)
-
+ (Boolean) currently_executing_a_context_hook?
Returns true if a
before(:context)
orafter(:context)
hook is currently executing. -
+ (String) id
The unique id of this example group.
-
+ (void) run(reporter = RSpec::Core::NullReporter)
Runs all the examples in this group.
Instance Method Summary (collapse)
-
- (ExampleGroup) initialize(inspect_output = nil)
constructor
A new instance of ExampleGroup.
Methods included from SharedExampleGroup
Methods included from MemoizedHelpers::ClassMethods
Methods included from Hooks
after, append_after, around, before, prepend_before
Methods included from Pending
Methods included from MemoizedHelpers
#is_expected, #should, #should_not, #subject
Constructor Details
- (ExampleGroup) initialize(inspect_output = nil)
Returns a new instance of ExampleGroup
688 689 690 691 |
# File 'lib/rspec/core/example_group.rb', line 688 def initialize(inspect_output=nil) @__inspect_output = inspect_output || '(no description provided)' super() # no args get passed end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
- (void) method_missing(name, *args) (private)
739 740 741 742 743 744 745 746 747 748 749 |
# File 'lib/rspec/core/example_group.rb', line 739 def method_missing(name, *args) if self.class.respond_to?(name) raise WrongScopeError, "`#{name}` is not available from within an example (e.g. an " \ "`it` block) or from constructs that run in the scope of an " \ "example (e.g. `before`, `let`, etc). It is only available " \ "on an example group (e.g. a `describe` or `context` block)." end super end |
Class Method Details
+ (void) add_example(example)
Adds an example to the example group
355 356 357 358 |
# File 'lib/rspec/core/example_group.rb', line 355 def self.add_example(example) reset_memoized examples << example end |
+ (void) context + (void) context(&example_group_definition) + (void) context(doc_string, *metadata_keys, metadata = {}, &example_implementation)
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.
278 |
# File 'lib/rspec/core/example_group.rb', line 278 define_example_group_method :context |
+ (Boolean) currently_executing_a_context_hook?
Returns true if a before(:context)
or after(:context)
hook is currently executing.
526 527 528 |
# File 'lib/rspec/core/example_group.rb', line 526 def self.currently_executing_a_context_hook? @currently_executing_a_context_hook end |
+ (void) describe + (void) describe(&example_group_definition) + (void) describe(doc_string, *metadata_keys, metadata = {}, &example_implementation)
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.
273 |
# File 'lib/rspec/core/example_group.rb', line 273 define_example_group_method :describe |
+ (String) description
Returns the current example group description
85 86 87 88 |
# File 'lib/rspec/core/example_group.rb', line 85 def self.description description = [:description] RSpec.configuration.format_docstrings_block.call(description) end |
+ (void) example + (void) example(&example_implementation) + (void) example(doc_string, *metadata_keys, metadata = {}) + (void) example(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Defines an example within a group.
154 |
# File 'lib/rspec/core/example_group.rb', line 154 define_example_method :example |
+ (void) example_group + (void) example_group(&example_group_definition) + (void) example_group(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Generates a subclass of this example group which inherits everything except the examples themselves.
268 |
# File 'lib/rspec/core/example_group.rb', line 268 define_example_group_method :example_group |
+ (void) fcontext + (void) fcontext(&example_group_definition) + (void) fcontext(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example group with :focus => true
.
Generates a subclass of this example group which inherits
everything except the examples themselves.
294 |
# File 'lib/rspec/core/example_group.rb', line 294 define_example_group_method :fcontext, :focus => true |
+ (void) fdescribe + (void) fdescribe(&example_group_definition) + (void) fdescribe(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example group with :focus => true
.
Generates a subclass of this example group which inherits
everything except the examples themselves.
290 |
# File 'lib/rspec/core/example_group.rb', line 290 define_example_group_method :fdescribe, :focus => true |
+ (void) fexample + (void) fexample(&example_implementation) + (void) fexample(doc_string, *metadata_keys, metadata = {}) + (void) fexample(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :focus => true
.
173 |
# File 'lib/rspec/core/example_group.rb', line 173 define_example_method :fexample, :focus => true |
+ (void) fit + (void) fit(&example_implementation) + (void) fit(doc_string, *metadata_keys, metadata = {}) + (void) fit(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :focus => true
.
176 |
# File 'lib/rspec/core/example_group.rb', line 176 define_example_method :fit, :focus => true |
+ (void) focus + (void) focus(&example_implementation) + (void) focus(doc_string, *metadata_keys, metadata = {}) + (void) focus(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :focus => true
.
170 |
# File 'lib/rspec/core/example_group.rb', line 170 define_example_method :focus, :focus => true |
+ (void) fspecify + (void) fspecify(&example_implementation) + (void) fspecify(doc_string, *metadata_keys, metadata = {}) + (void) fspecify(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :focus => true
.
179 |
# File 'lib/rspec/core/example_group.rb', line 179 define_example_method :fspecify, :focus => true |
+ (String) id
Returns the unique id of this example group. Pass this at the command line to re-run this exact example group.
657 658 659 |
# File 'lib/rspec/core/example_group.rb', line 657 def self.id Metadata.id_from() end |
+ (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.
331 332 333 |
# File 'lib/rspec/core/example_group.rb', line 331 def self.include_context(name, *args, &block) find_and_eval_shared("context", name, caller.first, *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.
341 342 343 |
# File 'lib/rspec/core/example_group.rb', line 341 def self.include_examples(name, *args, &block) find_and_eval_shared("examples", name, caller.first, *args, &block) end |
+ (void) it + (void) it(&example_implementation) + (void) it(doc_string, *metadata_keys, metadata = {}) + (void) it(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Defines an example within a group. This is the primary API to define a code example.
157 |
# File 'lib/rspec/core/example_group.rb', line 157 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.
320 |
# File 'lib/rspec/core/example_group.rb', line 320 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.
323 |
# File 'lib/rspec/core/example_group.rb', line 323 define_nested_shared_group_method :it_should_behave_like |
+ (void) metadata
The Metadata object associated with this group.
51 52 53 |
# File 'lib/rspec/core/example_group.rb', line 51 def self. @metadata ||= nil end |
+ (void) pending + (void) pending(&example_implementation) + (void) pending(doc_string, *metadata_keys, metadata = {}) + (void) pending(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :pending => true
194 |
# File 'lib/rspec/core/example_group.rb', line 194 define_example_method :pending, :pending => true |
+ (void) remove_example(example)
Removes an example from the example group
361 362 363 364 |
# File 'lib/rspec/core/example_group.rb', line 361 def self.remove_example(example) reset_memoized examples.delete example end |
+ (void) run(reporter = RSpec::Core::NullReporter)
Runs all the examples in this group.
583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 |
# File 'lib/rspec/core/example_group.rb', line 583 def self.run(reporter=RSpec::Core::NullReporter) return if RSpec.world.wants_to_quit reporter.example_group_started(self) should_run_context_hooks = descendant_filtered_examples.any? begin run_before_context_hooks(new('before(:context) hook')) if should_run_context_hooks 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) } true rescue Support::AllExceptionsExceptOnesWeMustNotRescue => ex for_filtered_examples(reporter) { |example| example.fail_with_exception(reporter, ex) } RSpec.world.wants_to_quit = true if reporter.fail_fast_limit_met? false ensure run_after_context_hooks(new('after(:context) hook')) if should_run_context_hooks reporter.example_group_finished(self) end end |
+ (void) skip + (void) skip(&example_implementation) + (void) skip(doc_string, *metadata_keys, metadata = {}) + (void) skip(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :skip => true
191 |
# File 'lib/rspec/core/example_group.rb', line 191 define_example_method :skip, :skip => true |
+ (void) specify + (void) specify(&example_implementation) + (void) specify(doc_string, *metadata_keys, metadata = {}) + (void) specify(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Defines an example within a group.
Useful for when your docstring does not read well off of it
.
166 |
# File 'lib/rspec/core/example_group.rb', line 166 define_example_method :specify |
+ (void) xcontext + (void) xcontext(&example_group_definition) + (void) xcontext(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to temporarily make an example group skipped. Generates a subclass of this example group which inherits everything except the examples themselves.
286 |
# File 'lib/rspec/core/example_group.rb', line 286 define_example_group_method :xcontext, :skip => "Temporarily skipped with xcontext" |
+ (void) xdescribe + (void) xdescribe(&example_group_definition) + (void) xdescribe(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to temporarily make an example group skipped. Generates a subclass of this example group which inherits everything except the examples themselves.
282 |
# File 'lib/rspec/core/example_group.rb', line 282 define_example_group_method :xdescribe, :skip => "Temporarily skipped with xdescribe" |
+ (void) xexample + (void) xexample(&example_implementation) + (void) xexample(doc_string, *metadata_keys, metadata = {}) + (void) xexample(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :skip => 'Temporarily skipped with xexample'
.
182 |
# File 'lib/rspec/core/example_group.rb', line 182 define_example_method :xexample, :skip => 'Temporarily skipped with xexample' |
+ (void) xit + (void) xit(&example_implementation) + (void) xit(doc_string, *metadata_keys, metadata = {}) + (void) xit(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :skip => 'Temporarily skipped with xit'
.
185 |
# File 'lib/rspec/core/example_group.rb', line 185 define_example_method :xit, :skip => 'Temporarily skipped with xit' |
+ (void) xspecify + (void) xspecify(&example_implementation) + (void) xspecify(doc_string, *metadata_keys, metadata = {}) + (void) xspecify(doc_string, *metadata_keys, metadata = {}, &example_implementation)
Shortcut to define an example with :skip => 'Temporarily skipped with xspecify'
.
188 |
# File 'lib/rspec/core/example_group.rb', line 188 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.
99 100 101 |
# File 'lib/rspec/core/example_group.rb', line 99 def described_class self.class.described_class end |