Class: RSpec::Core::Example
- Inherits:
-
Object
- Object
- RSpec::Core::Example
- Defined in:
- lib/rspec/core/example.rb
Overview
Example blocks are evaluated in the context of an instance
of an ExampleGroup
, not in the context of an instance of Example
.
Wrapper for an instance of a subclass of ExampleGroup. An instance of
RSpec::Core::Example
is returned by example definition methods
such as it and is yielded to the it,
before, after, around,
let and
subject blocks.
This allows us to provide rich metadata about each individual example without adding tons of methods directly to the ExampleGroup that users may inadvertantly redefine.
Useful for configuring logging and/or taking some action based on the state of an example's metadata.
Defined Under Namespace
Classes: ExecutionResult, Procsy
Instance Attribute Summary (collapse)
-
- (void) exception
readonly
Returns the first exception raised in the context of running this example (nil if no exception is raised).
-
- (void) metadata
readonly
Returns the metadata object associated with this example.
-
- (RSpec::Core::Reporter) reporter
readonly
The current reporter for the example.
Instance Method Summary (collapse)
-
- (void) description
Returns the string submitted to
example
or its aliases (e.g.specify
,it
, etc). -
- (void) example_group
Returns the example group class that provides the context for running this example.
-
- (ExecutionResult) execution_result
Represents the result of running this example.
-
- (String) file_path
The relative path to the file where this example was defined.
-
- (String) full_description
The full description (including the docstrings of all parent example groups).
-
- (String) id
The unique id of this example.
-
- (Example) initialize(example_group_class, description, user_metadata, example_block = nil)
constructor
private
Creates a new instance of Example.
-
- (void) inspect_output
Returns a description of the example that always includes the location.
-
- (String) location
The exact source location of this example in a form like
./path/to/spec.rb:17
. -
- (void) location_rerun_argument
Returns the location-based argument that can be passed to the
rspec
command to rerun this example. -
- (Boolean) pending
(also: #pending?)
Flag that indicates that the example is not expected to pass.
-
- (void) rerun_argument
deprecated
Deprecated.
Use #location_rerun_argument instead.
-
- (void) run(example_group_instance, reporter)
private
instance_execs the block passed to the constructor in the context of the instance of ExampleGroup.
-
- (Boolean) skip
(also: #skipped?)
Flag that will cause the example to not run.
Constructor Details
- (Example) initialize(example_group_class, description, user_metadata, example_block = nil)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a new instance of Example.
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/rspec/core/example.rb', line 153 def initialize(example_group_class, description, , example_block=nil) @example_group_class = example_group_class @example_block = example_block @metadata = Metadata::ExampleHash.create( @example_group_class., , example_group_class.method(:next_runnable_index_for), description, example_block ) # This should perhaps be done in `Metadata::ExampleHash.create`, # but the logic there has no knowledge of `RSpec.world` and we # want to keep it that way. It's easier to just assign it here. @metadata[:last_run_status] = RSpec.configuration.last_run_statuses[id] @example_group_instance = @exception = nil @clock = RSpec::Core::Time @reporter = RSpec::Core::NullReporter end |
Instance Attribute Details
- (void) exception (readonly)
Returns the first exception raised in the context of running this example (nil if no exception is raised).
125 126 127 |
# File 'lib/rspec/core/example.rb', line 125 def exception @exception end |
- (void) metadata (readonly)
Returns the metadata object associated with this example.
130 131 132 |
# File 'lib/rspec/core/example.rb', line 130 def @metadata end |
- (RSpec::Core::Reporter) reporter (readonly)
Returns the current reporter for the example
174 175 176 |
# File 'lib/rspec/core/example.rb', line 174 def reporter @reporter end |
Instance Method Details
- (void) description
Returns the string submitted to example
or its aliases (e.g.
specify
, it
, etc). If no string is submitted (e.g.
it { is_expected.to do_something }
) it returns the message generated
by the matcher if there is one, otherwise returns a message including
the location of the example.
76 77 78 79 80 81 82 83 84 |
# File 'lib/rspec/core/example.rb', line 76 def description description = if [:description].to_s.empty? location_description else [:description] end RSpec.configuration.format_docstrings_block.call(description) end |
- (void) example_group
Returns the example group class that provides the context for running this example.
178 179 180 |
# File 'lib/rspec/core/example.rb', line 178 def example_group @example_group_class end |
- (ExecutionResult) execution_result
Returns represents the result of running this example.
53 |
# File 'lib/rspec/core/example.rb', line 53 :execution_result |
- (String) file_path
Returns the relative path to the file where this example was defined.
56 |
# File 'lib/rspec/core/example.rb', line 56 :file_path |
- (String) full_description
Returns the full description (including the docstrings of all parent example groups).
59 |
# File 'lib/rspec/core/example.rb', line 59 :full_description |
- (String) id
Returns the unique id of this example. Pass this at the command line to re-run this exact example.
117 118 119 |
# File 'lib/rspec/core/example.rb', line 117 def id @id ||= Metadata.id_from() end |
- (void) inspect_output
Returns a description of the example that always includes the location.
87 88 89 90 91 92 93 |
# File 'lib/rspec/core/example.rb', line 87 def inspect_output inspect_output = "\"#{description}\"" unless [:description].to_s.empty? inspect_output << " (#{location})" end inspect_output end |
- (String) location
Returns the exact source location of this example in a form
like ./path/to/spec.rb:17
62 |
# File 'lib/rspec/core/example.rb', line 62 :location |
- (void) location_rerun_argument
Returns the location-based argument that can be passed to the rspec
command to rerun this example.
96 97 98 99 100 101 102 103 104 |
# File 'lib/rspec/core/example.rb', line 96 def location_rerun_argument @location_rerun_argument ||= begin loaded_spec_files = RSpec.configuration.loaded_spec_files Metadata.ascending() do || return [:location] if loaded_spec_files.include?([:absolute_file_path]) end end end |
- (Boolean) pending Also known as: pending?
Returns flag that indicates that the example is not expected to pass. It will be run and will either have a pending result (if a failure occurs) or a failed result (if no failure occurs).
66 |
# File 'lib/rspec/core/example.rb', line 66 :pending |
- (void) rerun_argument
Use #location_rerun_argument instead.
If there are multiple examples identified by this location, they will use #id to rerun instead, but this method will still return the location (that's why it is deprecated!).
Returns the location-based argument that can be passed to the rspec
command to rerun this example.
111 112 113 |
# File 'lib/rspec/core/example.rb', line 111 def rerun_argument location_rerun_argument end |
- (void) run(example_group_instance, reporter)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
instance_execs the block passed to the constructor in the context of the instance of RSpec::Core::ExampleGroup.
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/rspec/core/example.rb', line 189 def run(example_group_instance, reporter) @example_group_instance = example_group_instance @reporter = reporter hooks.register_global_singleton_context_hooks(self, RSpec.configuration.hooks) RSpec.configuration.configure_example(self) RSpec.current_example = self start(reporter) Pending.mark_pending!(self, pending) if pending? begin if skipped? Pending.mark_pending! self, skip elsif !RSpec.configuration.dry_run? with_around_and_singleton_context_hooks do begin run_before_example @example_group_instance.instance_exec(self, &@example_block) if pending? Pending.mark_fixed! self raise Pending::PendingExampleFixedError, 'Expected example to fail since it is pending, but it passed.', [location] end rescue Pending::SkipDeclaredInExample # no-op, required metadata has already been set by the `skip` # method. rescue Exception => e set_exception(e) ensure run_after_example end end end rescue Exception => e set_exception(e) ensure @example_group_instance = nil # if you love something... let it go end finish(reporter) ensure RSpec.current_example = nil end |
- (Boolean) skip Also known as: skipped?
Returns flag that will cause the example to not run.
The ExecutionResult status will be :pending
.
69 |
# File 'lib/rspec/core/example.rb', line 69 :skip |