44

How do I mark a cucumber scenario as pending so it doesn't get counted as a passed?

Scenario: Guest should not see edit link
# pending implementation

Shouldn't I be able to mark is as pending?

jspooner
  • 10,146
  • 9
  • 54
  • 81
  • Related to [disabling a feature without deleting it](https://stackoverflow.com/questions/2966519/how-do-i-disable-a-feature-in-specflow-gherkin-without-deleting-the-feature). – Raedwald Feb 21 '19 at 13:13

4 Answers4

63

The problem with the @wip tag, I've found, is that it doesn't make your test suite yellow. It completely ignores the wip features, and you tend to forget they exist. This has bitten my team in the rear when scenarios are tagged as @wip and then forgotten. I wish there was a better solution. The best I have is adding this custom step:

Given /^PENDING/ do
  pending
end

Rather than mark a real feature as pending, I can put this into the lineup with a message, like so:

Given PENDING: we need client input

Then it shows up like this:

(::) pending steps (::)

features/example.feature:15:in `Given PENDING: we need client input'

Pending halts the chain of tests, but it does NOT prevent cucumber from nagging about any undefined steps that follow in that same scenario. Also, ideally failing and pending features would tell you the name of the scenario that failed, but they don't.

Jaime Bellmyer
  • 22,349
  • 7
  • 51
  • 47
  • I think I'll use this one for my own projects. – sevenseacat Jun 30 '11 at 05:25
  • 2
    I have a similar notion of prepending a sort of "keyword" in a cucumber suite I work in. Here we could implement the step definition as `Given(/^Pending (.*)/) do |reason| pending(reason); end`. You'd then write the first Gherkin step in the Scenario as `* Pending we need client input`. Which would mark the other steps as skipped automatically. – erran Apr 03 '14 at 00:01
23

Another possibility is the @wip tag (work in progress). Scenarios tagged @wip will not be run by default, but just when you explicitly request them.

@wip
Scenario: New product form should have some special field
  Given I still work on this feature

This way you can exclude some scenarios from the automated build, so that it doesn't break while you are working on the feature.

averell
  • 3,672
  • 2
  • 18
  • 27
21

Okay figured this one out.

The Scenarios steps are marked as pending if it's not found in any of the steps files.

Scenario: New product form should have some special field
  Given joe is logged in as an user
  When on the new exercise page
  Then the select field should have some special field

It's even nice enough to stub out the pending step.

When /^on the new exercise page$/ do
  pending # express the regexp above with the code you wish you had
end
jspooner
  • 10,146
  • 9
  • 54
  • 81
  • Thanks! When I broke a test that won't be fixed until later in an epic, I used your answer and simply added "PENDING JIRA-1234" after "Then". ("JIRA-1234: is the story number of the epic) Now, it shows up as pending, so (hopefully!) I'll fix it before the epic merges. In the meantime, I can merge subtasks for the epic that would otherwise be blocked by failing WIP tests. – David Hempy Aug 21 '18 at 12:16
2

In addition to averell's answer, you can exclude scenario tags when running cucumber.

If @todo and @wip are tags you want to use for scenarios that are work in process or just mark pending scenarios, run your features like:

cucumber --tags ~@todo --tags ~@wip

If you're using Guard do something like this:

guard 'cucumber', :notification => true, :all_on_start => true,
                      :cmd => "bundle exec cucumber", 
                      :cli => "--tags ~@todo --tags ~@wip" do
   watch(%r{^features/.+\.feature$})
   watch(%r{^features/support/.+$})  { 'features' }
   watch(%r{^features/step_definitions/(.+)_steps\.rb$}) do |m|
     Dir[File.join("**/#{m[1]}.feature")][0] || 'features'
   end
end
dsci
  • 51
  • 3