Aufbau einer feature-Datei
Die @-Tags am Anfang können dazu verwendet werden, um beim tatsächlichen Testen nur eine spezielle Auswahl der Testfälle zu berücksichtigen. Der entsprechende Tag wird dafür in Zeile 20 der run.sh-Datei eingesetzt (siehe oben).
Einzelnen Test-Szenarien können zusätzlich mit einem Javascript-Tag annotiert werden, falls enthaltene Schritte Javascript zur Ausführung benötigen. Generell sind Javascript-Tests jedoch wesentlich langsamer als reguläre Tests. Sollten alle Szenarien Javascript benötigen, reicht es aus, den Tag am Anfang der Datei zusammen mit den anderen Tags zu setzen.

Tests sollten im Allgemeinen folgenden Aufbau haben:
- Given: Diese Schritte werden dazu verwendet, die Test-Situation bereitzustellen. Üblicherweise werden hier Benutzer, Kurse oder Plugin-Instanzen erstellt. Der Given-Teil soll noch nichts testen, deswegen sollte er kurz und verlässlich sein.
- When: Hier werden die Aktionen beschrieben, die die Test-Umgebung zu dem Punkt führen, an dem tatsächlich Bedingungen geprüft werden sollen. Dies kann bspw. das Einloggen, Navigieren zwischen Seiten, das Einreichen oder das Bewerten von Aufgaben beinhalten.
- Then: In diesen Schritten soll überprüft werden, ob sich das Plugin tatsächlich so verhält wie erwartet. Hier geschehen in der Regel recht simple Abfragen, z. B. ob ein Text oder ein bestimmtes Element sichtbar bzw. nicht sichtbar ist.
Ein konkreter Testfall sollte jedes dieser drei Worte nur einmal und in genau dieser Reihenfolge enthalten. Falls Given, When oder Then mehrere Schritte enthalten, können dafür die Wörter And und But verwendet werden.
Given the following user exists:
| username | ccolon |
| First name | Colin |
| Last name | Colon |
| email | ccolon@example.com |
And the following course exists:
| Name | Jump Judging (Level 1) |
| Shortname | sjea1 |
When I log in as "ccolon"
And I navigate to "Site home > Jump Judging (Level 1)"
Then I should see "You are not enrolled in this course"
But I should see "Enrol now"
Sollten mehreren Szenarien dasselbe Set-Up benötigen, können die entsprechenden Given-Schritte als Background zusammengefasst werden.
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Theo | Teacher | teacher1@example.com |
Diese Schritte werden dann vor jedem folgenden Szenario ausgeführt. In den einzelnen Szenarien können noch weitere, individuelle Given-Schritte definiert werden.