Logo: Relish

  1. Sign up
  2. Sign in

Project: RSpec Core 3.7

`--tag` option

Use the --tag (or -t) option to run examples that match a specified tag.
The tag can be a simple name or a name:value pair.

If a simple name is supplied, only examples with :name => true will run.
If a name:value pair is given, examples with name => value will run,
where value is always a string. In both cases, name is converted to a symbol.

Tags can also be used to exclude examples by adding a ~ before the tag. For
example, ~tag will exclude all examples marked with :tag => true and
~tag:value will exclude all examples marked with :tag => value.

Filtering by tag uses a hash internally, which means that you can't specify
multiple filters for the same key. For instance, if you try to exclude
:name => 'foo' and :name => 'bar', you will only end up excluding
:name => 'bar'.

To be compatible with the Cucumber syntax, tags can optionally start with an
@ symbol, which will be ignored.

Background
Given
a file named "tagged_spec.rb" with:
RSpec.describe "group with tagged specs" do
  it "example I'm working now", :focus => true do; end
  it "special example with string", :type => 'special' do; end
  it "special example with symbol", :type => :special do; end
  it "slow example", :skip => true do; end
  it "ordinary example", :speed => 'slow' do; end
  it "untagged example" do; end
end
Scenarios
Filter examples with non-existent tag
When
I run rspec . --tag mytag
Then
the process should succeed even though no examples were run
Filter examples with a simple tag
When
I run rspec . --tag focus
Then
the output should contain "include {:focus=>true}"
And
the examples should all pass
Filter examples with a simple tag and @
When
I run rspec . --tag @focus
Then
the output should contain "include {:focus=>true}"
Then
the examples should all pass
Filter examples with a `name:value` tag
When
I run rspec . --tag type:special
Then
the output should contain:
include {:type=>"special"}
And
the output should contain "2 examples"
And
the examples should all pass
Filter examples with a `name:value` tag and @
When
I run rspec . --tag @type:special
Then
the output should contain:
include {:type=>"special"}
And
the examples should all pass
Exclude examples with a simple tag
When
I run rspec . --tag ~skip
Then
the output should contain "exclude {:skip=>true}"
Then
the examples should all pass
Exclude examples with a simple tag and @
When
I run rspec . --tag [email protected]
Then
the output should contain "exclude {:skip=>true}"
Then
the examples should all pass
Exclude examples with a `name:value` tag
When
I run rspec . --tag ~speed:slow
Then
the output should contain:
exclude {:speed=>"slow"}
Then
the examples should all pass
Exclude examples with a `name:value` tag and @
When
I run rspec . --tag [email protected]:slow
Then
the output should contain:
exclude {:speed=>"slow"}
Then
the examples should all pass
Filter examples with a simple tag, exclude examples with another tag
When
I run rspec . --tag focus --tag ~skip
Then
the output should contain "include {:focus=>true}"
And
the output should contain "exclude {:skip=>true}"
And
the examples should all pass
Exclude examples with multiple tags
When
I run rspec . --tag ~skip --tag ~speed:slow
Then
the output should contain one of the following:
exclude {:skip=>true, :speed=>"slow"}
exclude {:speed=>"slow", :skip=>true}
Then
the examples should all pass

Last published 25 days ago by myronmarston.