Running single scenarios in Behat

A simple way to run a work-in-progress scenario in Behat.

Running tagged tests

Behat is a “php framework for autotesting your business expectations” and as any test suite it packs a degree of flexibility to run specific tests (“scenarios” in Gherkin terms) that represent a group of related features.
Where Codeception allows running a single test method in a test case like this:

codecept run tests/some-suite/SomeTest.php:someTest

Behat allows running all scenarios, or features, tagged in a specific way like this:

behat --tags someTag

If I had the 4 scenarios below in a some-feature.feature file:

Feature: different users can see different stuff

Background:
    Given the site is pre-filled
    And there is a user for each role

@visitor
Scenario: visitors can see public posts
    Given I am a visitor
    When I visit '/'
    Then I should see 'Public Post'

@visitor
Scenario: visitors cannot see subscriber posts
    Given I am a visitor
    When I visit '/'
    Then I should not see 'Subscriber Post'

@subscriber
Scenario: visitors cannot public posts
    Given I am a subscriber
    When I visit '/'
    Then I should see 'Public Post'

@subscriber
Scenario: visitors cannot see subscriber posts
    Given I am a subscriber
    When I visit '/'
    Then I should see 'Subscriber Post'

Running behat --tags visitor will run the first two scenarios while running behat --tag @subscriber will run the last two.

Running a single scenario

Running a single scenario, like the one I’m working on, is then as easy as tagging it:

Feature: different users can see different stuff

Background:
    Given the site is pre-filled
    And there is a user for each role

@visitor
Scenario: visitors can see public posts
    Given I am a visitor
    When I visit '/'
    Then I should see 'Public Post'

@visitor
Scenario: visitors cannot see subscriber posts
    Given I am a visitor
    When I visit '/'
    Then I should not see 'Subscriber Post'

@subscriber
Scenario: subscribers can see public posts
    Given I am a subscriber
    When I visit '/'
    Then I should see 'Public Post'

@subscriber
Scenario: subscribers can see subscriber posts
    Given I am a subscriber
    When I visit '/'
    Then I should see 'Subscriber Post'

@subscriber @current
Scenario: subscribers cannot see premium posts
    Given I am a subscriber
    When I visit '/'
    Then I should not see 'Premium Post'

I like to use the current tag but that really is a matter of preference as long as the tag name is used in the command like

behat --tags current

This is especially useful when running all the scenarios and all the features might take a long time.
Once the scenario is no more the current one it’s a matter of removing the current tag and moving on.