NAME¶
Test::BDD::Cucumber::Manual::Steps - How to write Step Definitions
VERSION¶
version 0.26
INTRODUCTION¶
The 'code' part of a Cucumber test-suite are the Step Definition files which
match steps, and execute code based on them. This document aims to give you a
quick overview of those.
STARTING OFF¶
Most of your step files will want to start something like:
#!perl
use strict;
use warnings;
use Test::More;
use Test::BDD::Cucumber::StepFile;
The fake shebang line gives some hints to syntax highlighters, and "use
strict;" and "use warnings;" are hopefully fairly standard at
this point.
Most of
my Step Definition files make use of Test::More, but you can use
any Test::Builder based testing module. Your step will pass its pass or fail
status back to its harness via Test::Builder -
each step is run as if
it were its own tiny test file, with its own localized
Test::Builder object.
Test::BDD::Cucumber::StepFile gives us the functions "Given()",
"When()", "Then()" and "Step()". These pass the
step definitions to the class loading the step definitions, and specify which
Step Verb should be used - "Step()" matches any.
STEP DEFINITIONS¶
Given qr/I have (\d+)/, sub {
S->{'count'} += $1;
}
When "The count is an integer", sub {
S->{'count'} =
int( S->{'count'} );
}
Then qr/The count should be (\d+)/, sub {
is( S->{'count'}, C->matches->[0], "Count matches" );
}
Each of the exported verb functions accept a regular expression (or a string
that's used as one), and a coderef. The coderef is passed a single argument,
the Test::BDD::Cucumber::StepContext object. Before the subref is executed,
localized definitions of "S" and "C" are set, such that
the lines below are equivalent:
# Access the first match
sub { my $context = shift; print $context->matches->[0] }
sub { C->matches->[0] }
# Set a value in the scenario-level stash
sub { my $context = shift; my $stash = $context->stash; $stash->{'count'} = 1 }
sub { S->{'count'} = 1 }
We will evaluate the regex immediately before we execute the coderef, so you can
use $1, $2, $etc, although these are also available via the StepContext.
NEXT STEPS¶
How step files are loaded is discussed in
Test::BDD::Cucumber::Manual::Architecture, but isn't of much interest. Of far
more interest should be seeing what you have available in
Test::BDD::Cucumber::StepContext...
AUTHOR¶
Peter Sergeant "pete@clueball.com"
LICENSE¶
Copyright 2011-2014, Peter Sergeant; Licensed under the same terms as Perl