Test::BDD::Cucumber::Manual::Steps - How to write Step Definitions
version 0.11
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.
Most of your step files will want to start something like:
#!perl use strict; use warnings; use Test::More; use Test::BDD::Cucumber::StepFile; use Method::Signatures;
The fake shebang line gives some hints to syntax highlighters, and use strict; and use warnings; are hopefully fairly standard at this point.
use strict;
use warnings;
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.
Given()
When()
Then()
Step()
Method::Signatures allows us to use a small amount of syntactic sugar for the step definitions, and gives us the func() keyword you'll see in a minute.
func()
Given qr/I have (\d+)/, func ($c) { $c->stash->{'scenario'}->{'count'} += $1; } When "The count is an integer", func ($c) { $c->stash->{'scenario'}->{'count'} = int( $c->stash->{'scenario'}->{'count'} ); } Then qr/The count should be (\d+)/, func ($c) { is( $c->stash->{'scenario'}->{'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. To make this a little prettier, we use Method::Signatures's func() keyword so we're not continually typing: sub { my $c = shift; ... .
sub { my $c = shift; ...
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.
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...
Peter Sergeant pete@clueball.com
pete@clueball.com
Copyright 2011, Peter Sergeant; Licensed under the same terms as Perl
To install Test::BDD::Cucumber, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test::BDD::Cucumber
CPAN shell
perl -MCPAN -e shell install Test::BDD::Cucumber
For more information on module installation, please visit the detailed CPAN module installation guide.