cucumber/tags
Last updated
Was this helpful?
Last updated
Was this helpful?
Tags are a great way to organise your features and scenarios. Consider this example:
A Scenario or feature can have as many tags as you like. Just separate them with spaces:
Any tag that exists on a Feature will be inherited by Scenario, Scenario Outline or Examples.
You can use the
--tags
option to tell Cucumber that you only want to run features or scenarios that have (or don’t have) certain tags. Examples:
Tags are also a great way to “link” your Cucumber features to other documents. For example, if you have to deal with old school requirements in a different system (Word, Excel, a wiki) you can refer to numbers:
Another creative way to use tags is to keep track of where in the development process a certain feature is:
As you may have seen in the previous examples Cucumber allows you to use logical ANDs and ORs to help gain greater control of what features to run.
Tags which are comma separated are ORed:
Example: Running scenarios which match @important OR @billing
Tags which are passed in separate --tags are ANDed
Example: Running scenarios which match @important AND @biling
You can combine these two methods to create powerful selection criteria:
Example: Running scenarios which match: (@billing OR @WIP)AND@important
Example: Skipping both @todo and @wip tags
This feature was originally added in version 0.4.3. The logical behaviour of tags was later reversed in version 0.6.0.
It is currently not possible to override the tag filters from a profile.
The default profile, for example, includes a--tags ~@wip
filter. But what if you want to use everything from the default profileexceptthe--tags ~@wip
portion?
You might think you could just append something like this to the command line to “undo” the--tags
from the profile:--tags @wip,~@wip
(anything either tagged with @wip or not tagged with @wip)
But because that is effectively doing an “and” between--tags ~@wip
and--tags @wip,~@wip
, it doesn’t match any scenarios.
How can we override the tag filter then?
If you’re following Kanban principles, you want to limit the work in progress (WIP). The idea is that the fewer features or scenarios that being worked on simultaneously, the quicker you’ll be able to implement new features.
Cucumber can enforce this using tag limits. Here is an example:
This will make cucumber fail if you have more than 2@dev
tags or more than 3@qa
tags, even if each of your scenarios pass individually.
Used in conjunction with the--wip
switch you can set up your project to enforce theWIPlimits of your team.
@allow-rescue: Turns off Cucumber’s exception capturing for the tagged scenario(s). Used when the code being tested is expected to raise and handle exceptions.
@javascript: Uses a javascript-aware system to process web requests (e.g., Selenium) instead of the default (non-javascript-aware) webrat browser.
(Another way to “filter” what you want to run is to use thefile.feature:line
pattern or the--scenario
option as described in).
Tags are also used in Tagged , which let you use tags to define what Before
and After
blocks get run for what scenarios.
You can use this tag logic in youras well.
@no-txn: Turns off transactions. See.