Behat
Behat is a Behaviour Driven Development (BDD) framework
This document is a work in progress (HQ week off project) and it should not be taken into account for nothing out of this scope nor nothing official
Example
The expected behaviours are specified as scenarios
Basic scenario
Feature: Login In order to login As a moodle user I need to be able to authenticate me in Moodle
Scenario: Login as an existing user Given I am on "login/index.php" When I fill in "username" with "admin" And I fill in "password" with "moodle" And I press "loginbtn" Then I should see "Moodle 101: Course Name"
Scenario: Login as an unexisting user Given I am on "login/index.php" When I fill in "username" with "adminasdasd" And I fill in "password" with "moodlesdfasdf" And I press "loginbtn" Then I should see "Invalid login, please try again"
Complex scenario
The aim of this project is to be able to define scenarios like this. Note the quoted strings are received as variables by the steps definitions which will process them; the steps under Feature: are only descriptive
Feature: Add a discussion to a forum
In order to add a discussion As a moodle user I need to be able to view the added data in a forum
Scenario: A teacher adds a discussion Given I am logged as a "teacher" And I go to a course And I create a "forum" activity And I view the "forum" activity When I add a "forum_discussion" filling the fields "subject,message[text]" with "I'm the user subject,Dealing with \, split" # Wrapper step, it will redirect the petition to a "forum_discussion" method Then I should see "Discussion" And I should see "Subject" And I should see "I'm the user subject"
A config file with test data must be set in order to be able to process the "logged as a $roleshortname" or the "a course" statements
Contexts
The steps are executed in steps definitions, which are defined in "contexts"
Organization
The Features context class is split in different context to ease the step definitions location.
- A main FeaturesContext class which extends MinkContext, the basic web development set of actions
- Contains all the basic steps definitions like visit($url), pressButton($button) to manage the browser
- The most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios
- An abstract BaseContext class with helper methods to other context
- A context for each component extending BaseContext