Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Behat: Difference between revisions

From MoodleDocs
(Created page with "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...")
 
Line 7: Line 7:


=== Basic scenario ===
=== Basic scenario ===
Feature: Login
  Feature: Login
  In order to login
    In order to login
  As a moodle user
    As a moodle user
  I need to be able to authenticate me in Moodle
    I need to be able to authenticate me in Moodle


  Scenario: Login as an existing user
    Scenario: Login as an existing user
    Given I am on "login/index.php"
      Given I am on "login/index.php"
    When I fill in "username" with "admin"
      When I fill in "username" with "admin"
    And I fill in "password" with "moodle"
      And I fill in "password" with "moodle"
    And I press "loginbtn"
      And I press "loginbtn"
    Then I should see "Moodle 101: Course Name"
      Then I should see "Moodle 101: Course Name"


  Scenario: Login as an unexisting user
    Scenario: Login as an unexisting user
    Given I am on "login/index.php"
      Given I am on "login/index.php"
    When I fill in "username" with "adminasdasd"
      When I fill in "username" with "adminasdasd"
    And I fill in "password" with "moodlesdfasdf"
      And I fill in "password" with "moodlesdfasdf"
    And I press "loginbtn"
      And I press "loginbtn"
    Then I should see "Invalid login, please try again"
      Then I should see "Invalid login, please try again"


=== Complex scenario ===  
=== Complex scenario ===  

Revision as of 01:56, 9 August 2012

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