SlideShare a Scribd company logo
1
BDD with Behat &
Drupal
Alessio Piazza
Software Developer @SparkFabrik
(twinbit + agavee)
twitter: @alessiopiazza
I do stuff with Drupal
SPARKFABRIK
3
• Behaviour Driven Development
• a software development process that emerged
from TDD (Test Driven Development)
• Behaviour driven development specifies that
tests of any unit of software should be specified
in terms of the desired behaviour of the unit
BDD
SPARKFABRIK
WHY BDD? or TDD?
• You must test your application
• Save your self from regressions (fix one thing,
break another one)
• Save your self from misunderstanding between
you and your client
• Your tests become specification
4
SPARKFABRIK
BDD Workflow
1. Write a specification feature
2. Implement its test
3. Run test and watch it FAIL
4. Change your app to make test PASS
5. Run test and watch it PASS
6. Repat from 2-5 until all GREEN
5
SPARKFABRIK
BDD: HOW IT WORKS?
6
HOW IT WORKS?
7
Write a specification feature
8
Feature: Download Drupal 8
In order to use Drupal 8
as a user
i should be able to download it from drupal.org
Scenario: Download Drupal 8 from Drupal.org
Given i am on the homepage
When i Click “Download and Extend”
Then I should see the link “Download Drupal 8.0.0”
Scenario: …
SPARKFABRIK
SCENARIO STRUCTURE
9
Scenario: Download Drupal 8 from Drupal.org
Given I am on drupal.org homepage
When I Click “Download and Extend”
Then I should see the link “Download Drupal 8.0.0”
SPARKFABRIK
SCENARIO STRUCTURE
10
Given i am on drupal.org homepage
And i Click “Download and Extend”
Then I should see the link “Download Drupal 8.0.0”
Scenario: Download Drupal 8 from Drupal.org
Keyword Description
SPARKFABRIK
SCENARIO STRUCTURE
11
Given i am on drupal.org homepage
And i Click “Download and Extend”
Then I should see the link “Download Drupal 8.0.0”
Scenario: Download Drupal 8 from Drupal.org
Keyword Description
Steps
Given I am on drupal.org homepage
When I Click “Download and Extend”
Then I should see the link “Download …”
SPARKFABRIK
STEPS: Keywords
12
Given -> To put the system in a known state
Given I am an anonymous user
SPARKFABRIK
Given
STEPS: Keywords
13
When -> To describe the key action to performs
When I click on the link
SPARKFABRIK
Given
STEPS: Keywords
14
When
Then -> To to observe outcomes
Then I should see the text “Hello”
SPARKFABRIK
Given
STEPS: Keywords
15
When
Then
And / But -> To make our scenario more readable
SPARKFABRIK
STEPS: Keywords
16
Scenario: Download Drupal 8 from Drupal.org
Given I am on drupal.org homepage
Given I am an anonymous user
When I Click “Download and Extend”
When I Click “Download Drupal 8.0.0”
Then I should see the link “Drupal Core 8.0.0”
SPARKFABRIK
STEPS: Keywords
17
Scenario: Download Drupal 8 from Drupal.org
Given I am on drupal.org homepage
And I am an anonymous user
When I Click “Download and Extend”
And I Click “Download Drupal 8.0.0”
Then I should see the link “Drupal Core 8.0.0”
SPARKFABRIK
GHERKIN
• It is a Business Readable, Domain Specific
Language
• Lets you describe software’s behaviour without
detailing how that behaviour is implemented.
• Gherkin is the language that BEHAT
understands.
18
SPARKFABRIK
BEHAT
docs.behat.org/en/v3.0/
Open source Behavior Driven Development
framework for PHP (5.3+)
Inspired from Cucumber (Ruby)
www.cucumber.io
From version 3 BEHAT it’s an official
Cucumber implementation in PHP
Let us write tests based on our scenarios
19
SPARKFABRIK
HOW BEHAT READS
GHERKIN?
20
Given I am an anonymous user
SPARKFABRIK
HOW BEHAT READS
GHERKIN?
21
/**
* @Given I am an anonymous user
*/
public function assertAnonymousUser() {
// Verify the user is logged out.
if ($this->loggedIn()) {
$this->logout();
}
}
Given I am an anonymous user
SPARKFABRIK
HOW BEHAT READS
GHERKIN?
22
Then I should not see the text :text
SPARKFABRIK
HOW BEHAT READS
GHERKIN?
23
/**
* @Then I should not see the text :text
*/
public function assertNotTextVisible($text) {
// Use the Mink Extension step definition.
$this->assertPageNotContainsText($text);
}
Then I should not see the text :text
SPARKFABRIK
STEP RESULTS
24
/**
* @Then I should not see the text :text
*/
public function assertNotTextVisible($text) {
// This step will fail.
throw new Exception(‘Test failed’);
}
• A step FAILS when an Exception is thrown
SPARKFABRIK
STEP RESULTS
25
/**
* @Then I will trigger a success
*/
public function triggerSuccess() {
// This step will pass.
print(‘Hello DrupalDay’);
}
• A step PASS when no Exception are raised
SPARKFABRIK
OTHER STEP RESULTS
26
• SUCCESSFUL
• FAILED
• PENDING
• UNDEFINED
• SKIPPED
• AMBIGUOUS
• REDUNDANT
SPARKFABRIK
WHERE ARE THESE
STEPS?
27
• STEPS are defined inside plain PHP Object
classes, called CONTEXTS
• MinkContext and DrupalContext give use a lot of
pre-defined steps ready to be used
• Custom steps can be defined inside
FeatureContext class
SPARKFABRIK
Sum Up
28
Give use the syntax
to write features and scenarios
Our framework that reads our
scenarios and run tests
Classes containing our step
definitions
GHERKIN
BEHAT
CONTEXTS
SPARKFABRIK
How we integrate Behat and
Drupal?
29
Behat Drupal Extension
An integration layer between
Drupal and Behat
https://www.drupal.org/project/drupalextension
https://github.com/jhedstrom/drupalextension
SPARKFABRIK
From your project root..
composer require drupal/drupal-extension
30
- Installing drupal/drupal-driver (v1.1.4)
Downloading: 100%
> DrupalCoreComposerComposer::vendorTestCodeCleanup
- Installing symfony/filesystem (v3.0.0)
Downloading: 100%
> DrupalCoreComposerComposer::vendorTestCodeCleanup
- Installing symfony/config (v2.8.0)
Downloading: 100%
> DrupalCoreComposerComposer::vendorTestCodeCleanup
- Installing behat/transliterator (v1.1.0)
Loading from cache
…
…
> DrupalCoreComposerComposer::vendorTestCodeCleanup
- Installing drupal/drupal-extension (v3.1.3)
Downloading: 100% SPARKFABRIK
Create file behat.yml
31
1 default:
2 suites:
3 default:
4 contexts:
5 - FeatureContext
6 - DrupalDrupalExtensionContextDrupalContext
7 - DrupalDrupalExtensionContextMinkContext
8 extensions:
9 BehatMinkExtension:
10 goutte: ~
11 base_url: http://d8.drupalday2015.sparkfabrik.loc # Replace with your site's URL
12 DrupalDrupalExtension:
13 blackbox: ~
see https://github.com/jhedstrom/drupalextension
SPARKFABRIK
Then --init your test suite
32
vendor/bin/behat --init
+d features - place your *.feature files here
+d features/bootstrap - place your context classes here
+f features/bootstrap/FeatureContext.php - place your
definitions, transformations and hooks here
SPARKFABRIK
Demo!
33
SPARKFABRIK
BROWSER INTERACTION
• With BDD we write clear, understandable
scenario
• Our scenario often describe an interaction with
the browser
34
WE NEED A BROWSER EMULATOR
SPARKFABRIK
BROWSER EMULATORS
• Headless browser emulators (Goutte)
• Browser controllers (Selenium2, SAHI)
• They do basically the same thing: control or
emulate browsers but they do them in different
ways
• They comes with their pro and cons
35
SPARKFABRIK
MINK!
http://mink.behat.org/en/latest/
• MINK removes API differences between different browser emulators
• MINK provides different drivers for every browser emulator
• MINK gives you an easy way to
1. control the browser
2. traverse pages
3. manipulate page elements
4. interact with page elements
36
SPARKFABRIK
37
/**
* @When /^(?:|I )move forward one page$/
*/
public function forward() {
$this->getSession()->forward();
}
MINK!
http://mink.behat.org/en/latest/
When I move forward one page
SPARKFABRIK
Wrap up
38
GHERKIN
BEHAT
CONTEXTS
MINK
Give use the syntax
to write features and scenarios
Our framework that reads our
scenarios and run the tests
Classes containing our step
definitions
Describe browser interaction
without worrying about the browser
SPARKFABRIK
39

More Related Content

What's hot

Ant User Guide
Ant User GuideAnt User Guide
Ant User Guide
Muthuselvam RS
 
Django app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh AgarwalDjango app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh Agarwal
ratneshsinghparihar
 
Build website in_django
Build website in_django Build website in_django
Build website in_django swee meng ng
 
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesJBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
Tikal Knowledge
 
Intro to WordPress Plugin Development
Intro to WordPress Plugin DevelopmentIntro to WordPress Plugin Development
Intro to WordPress Plugin Development
Brad Williams
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
juzten
 
Web application development with Django framework
Web application development with Django frameworkWeb application development with Django framework
Web application development with Django framework
flapiello
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
Haiqi Chen
 
PloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyondPloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyondDavid Glick
 
Introduction to building joomla! components using FOF
Introduction to building joomla! components using FOFIntroduction to building joomla! components using FOF
Introduction to building joomla! components using FOFTim Plummer
 
Flask
FlaskFlask
How to create a joomla component from scratch
How to create a joomla component from scratchHow to create a joomla component from scratch
How to create a joomla component from scratch
Tim Plummer
 
Composer & Drupal
Composer & DrupalComposer & Drupal
Composer & Drupal
drubb
 
Django - Python MVC Framework
Django - Python MVC FrameworkDjango - Python MVC Framework
Django - Python MVC Framework
Bala Kumar
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
Pavan Kumar N
 
Headless Drupal
Headless DrupalHeadless Drupal
Headless Drupal
drubb
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask Presentation
Parag Mujumdar
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
Rosario Renga
 
Django Documentation
Django DocumentationDjango Documentation
Django Documentation
Ying wei (Joe) Chou
 

What's hot (20)

Ant User Guide
Ant User GuideAnt User Guide
Ant User Guide
 
Django app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh AgarwalDjango app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh Agarwal
 
Build website in_django
Build website in_django Build website in_django
Build website in_django
 
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesJBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
 
Intro to WordPress Plugin Development
Intro to WordPress Plugin DevelopmentIntro to WordPress Plugin Development
Intro to WordPress Plugin Development
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
 
Web application development with Django framework
Web application development with Django frameworkWeb application development with Django framework
Web application development with Django framework
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Django Girls Tutorial
Django Girls TutorialDjango Girls Tutorial
Django Girls Tutorial
 
PloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyondPloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyond
 
Introduction to building joomla! components using FOF
Introduction to building joomla! components using FOFIntroduction to building joomla! components using FOF
Introduction to building joomla! components using FOF
 
Flask
FlaskFlask
Flask
 
How to create a joomla component from scratch
How to create a joomla component from scratchHow to create a joomla component from scratch
How to create a joomla component from scratch
 
Composer & Drupal
Composer & DrupalComposer & Drupal
Composer & Drupal
 
Django - Python MVC Framework
Django - Python MVC FrameworkDjango - Python MVC Framework
Django - Python MVC Framework
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Headless Drupal
Headless DrupalHeadless Drupal
Headless Drupal
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask Presentation
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
 
Django Documentation
Django DocumentationDjango Documentation
Django Documentation
 

Similar to Behaviour Driven Development con Behat & Drupal

Voiture tech talk
Voiture tech talkVoiture tech talk
Voiture tech talk
Hoppinger
 
Virtual Environment and Web development using Django
Virtual Environment and Web development using DjangoVirtual Environment and Web development using Django
Virtual Environment and Web development using Django
Sunil kumar Mohanty
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
Pablo Godel
 
‘Hello, world!’ application how to dockerize golang application
‘Hello, world!’ application how to dockerize golang application‘Hello, world!’ application how to dockerize golang application
‘Hello, world!’ application how to dockerize golang application
Katy Slemon
 
Ultimate Survival - React-Native edition
Ultimate Survival - React-Native editionUltimate Survival - React-Native edition
Ultimate Survival - React-Native edition
Richard Radics
 
Write your first WordPress plugin
Write your first WordPress pluginWrite your first WordPress plugin
Write your first WordPress pluginAnthony Montalbano
 
Bugzilla Installation Process
Bugzilla Installation ProcessBugzilla Installation Process
Bugzilla Installation ProcessVino Harikrishnan
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdevFrank Rousseau
 
Spring Live Sample Chapter
Spring Live Sample ChapterSpring Live Sample Chapter
Spring Live Sample ChapterSyed Shahul
 
Hands on Docker - Launch your own LEMP or LAMP stack
Hands on Docker -  Launch your own LEMP or LAMP stackHands on Docker -  Launch your own LEMP or LAMP stack
Hands on Docker - Launch your own LEMP or LAMP stack
Dana Luther
 
Mojolicious
MojoliciousMojolicious
Mojolicious
Marcus Ramberg
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
Thomas Tong, FRM, PMP
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
DrupalDay
 
Docker for Ruby Developers
Docker for Ruby DevelopersDocker for Ruby Developers
Docker for Ruby Developers
Aptible
 
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Dana Luther
 
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Positive Hack Days
 
Development Setup of B-Translator
Development Setup of B-TranslatorDevelopment Setup of B-Translator
Development Setup of B-Translator
Dashamir Hoxha
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best Practices
Tibor Vass
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
Docker, Inc.
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
OKLABS
 

Similar to Behaviour Driven Development con Behat & Drupal (20)

Voiture tech talk
Voiture tech talkVoiture tech talk
Voiture tech talk
 
Virtual Environment and Web development using Django
Virtual Environment and Web development using DjangoVirtual Environment and Web development using Django
Virtual Environment and Web development using Django
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
‘Hello, world!’ application how to dockerize golang application
‘Hello, world!’ application how to dockerize golang application‘Hello, world!’ application how to dockerize golang application
‘Hello, world!’ application how to dockerize golang application
 
Ultimate Survival - React-Native edition
Ultimate Survival - React-Native editionUltimate Survival - React-Native edition
Ultimate Survival - React-Native edition
 
Write your first WordPress plugin
Write your first WordPress pluginWrite your first WordPress plugin
Write your first WordPress plugin
 
Bugzilla Installation Process
Bugzilla Installation ProcessBugzilla Installation Process
Bugzilla Installation Process
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 
Spring Live Sample Chapter
Spring Live Sample ChapterSpring Live Sample Chapter
Spring Live Sample Chapter
 
Hands on Docker - Launch your own LEMP or LAMP stack
Hands on Docker -  Launch your own LEMP or LAMP stackHands on Docker -  Launch your own LEMP or LAMP stack
Hands on Docker - Launch your own LEMP or LAMP stack
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
 
Docker for Ruby Developers
Docker for Ruby DevelopersDocker for Ruby Developers
Docker for Ruby Developers
 
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
 
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
 
Development Setup of B-Translator
Development Setup of B-TranslatorDevelopment Setup of B-Translator
Development Setup of B-Translator
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best Practices
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 

More from sparkfabrik

KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on KubernetesKCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
sparkfabrik
 
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
sparkfabrik
 
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirtIAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
sparkfabrik
 
2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages
sparkfabrik
 
2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte
sparkfabrik
 
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
sparkfabrik
 
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP EcosystemWhat is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
sparkfabrik
 
UX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdfUX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdf
sparkfabrik
 
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
sparkfabrik
 
Deep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloudDeep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloud
sparkfabrik
 
KCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with CrossplaneKCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with Crossplane
sparkfabrik
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
sparkfabrik
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
sparkfabrik
 
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
sparkfabrik
 
Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!
sparkfabrik
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
sparkfabrik
 
From React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I startedFrom React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I started
sparkfabrik
 
Headless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIsHeadless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIs
sparkfabrik
 
Cloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guideCloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guide
sparkfabrik
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developers
sparkfabrik
 

More from sparkfabrik (20)

KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on KubernetesKCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
 
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
 
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirtIAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
 
2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages
 
2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte
 
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
 
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP EcosystemWhat is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
 
UX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdfUX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdf
 
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
 
Deep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloudDeep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloud
 
KCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with CrossplaneKCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with Crossplane
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
 
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
 
Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
 
From React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I startedFrom React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I started
 
Headless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIsHeadless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIs
 
Cloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guideCloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guide
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developers
 

Recently uploaded

Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
ayushiqss
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
varshanayak241
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
Jelle | Nordend
 

Recently uploaded (20)

Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 

Behaviour Driven Development con Behat & Drupal

  • 1. 1
  • 2. BDD with Behat & Drupal Alessio Piazza Software Developer @SparkFabrik (twinbit + agavee) twitter: @alessiopiazza I do stuff with Drupal SPARKFABRIK
  • 3. 3 • Behaviour Driven Development • a software development process that emerged from TDD (Test Driven Development) • Behaviour driven development specifies that tests of any unit of software should be specified in terms of the desired behaviour of the unit BDD SPARKFABRIK
  • 4. WHY BDD? or TDD? • You must test your application • Save your self from regressions (fix one thing, break another one) • Save your self from misunderstanding between you and your client • Your tests become specification 4 SPARKFABRIK
  • 5. BDD Workflow 1. Write a specification feature 2. Implement its test 3. Run test and watch it FAIL 4. Change your app to make test PASS 5. Run test and watch it PASS 6. Repat from 2-5 until all GREEN 5 SPARKFABRIK
  • 6. BDD: HOW IT WORKS? 6
  • 8. Write a specification feature 8 Feature: Download Drupal 8 In order to use Drupal 8 as a user i should be able to download it from drupal.org Scenario: Download Drupal 8 from Drupal.org Given i am on the homepage When i Click “Download and Extend” Then I should see the link “Download Drupal 8.0.0” Scenario: … SPARKFABRIK
  • 9. SCENARIO STRUCTURE 9 Scenario: Download Drupal 8 from Drupal.org Given I am on drupal.org homepage When I Click “Download and Extend” Then I should see the link “Download Drupal 8.0.0” SPARKFABRIK
  • 10. SCENARIO STRUCTURE 10 Given i am on drupal.org homepage And i Click “Download and Extend” Then I should see the link “Download Drupal 8.0.0” Scenario: Download Drupal 8 from Drupal.org Keyword Description SPARKFABRIK
  • 11. SCENARIO STRUCTURE 11 Given i am on drupal.org homepage And i Click “Download and Extend” Then I should see the link “Download Drupal 8.0.0” Scenario: Download Drupal 8 from Drupal.org Keyword Description Steps Given I am on drupal.org homepage When I Click “Download and Extend” Then I should see the link “Download …” SPARKFABRIK
  • 12. STEPS: Keywords 12 Given -> To put the system in a known state Given I am an anonymous user SPARKFABRIK
  • 13. Given STEPS: Keywords 13 When -> To describe the key action to performs When I click on the link SPARKFABRIK
  • 14. Given STEPS: Keywords 14 When Then -> To to observe outcomes Then I should see the text “Hello” SPARKFABRIK
  • 15. Given STEPS: Keywords 15 When Then And / But -> To make our scenario more readable SPARKFABRIK
  • 16. STEPS: Keywords 16 Scenario: Download Drupal 8 from Drupal.org Given I am on drupal.org homepage Given I am an anonymous user When I Click “Download and Extend” When I Click “Download Drupal 8.0.0” Then I should see the link “Drupal Core 8.0.0” SPARKFABRIK
  • 17. STEPS: Keywords 17 Scenario: Download Drupal 8 from Drupal.org Given I am on drupal.org homepage And I am an anonymous user When I Click “Download and Extend” And I Click “Download Drupal 8.0.0” Then I should see the link “Drupal Core 8.0.0” SPARKFABRIK
  • 18. GHERKIN • It is a Business Readable, Domain Specific Language • Lets you describe software’s behaviour without detailing how that behaviour is implemented. • Gherkin is the language that BEHAT understands. 18 SPARKFABRIK
  • 19. BEHAT docs.behat.org/en/v3.0/ Open source Behavior Driven Development framework for PHP (5.3+) Inspired from Cucumber (Ruby) www.cucumber.io From version 3 BEHAT it’s an official Cucumber implementation in PHP Let us write tests based on our scenarios 19 SPARKFABRIK
  • 20. HOW BEHAT READS GHERKIN? 20 Given I am an anonymous user SPARKFABRIK
  • 21. HOW BEHAT READS GHERKIN? 21 /** * @Given I am an anonymous user */ public function assertAnonymousUser() { // Verify the user is logged out. if ($this->loggedIn()) { $this->logout(); } } Given I am an anonymous user SPARKFABRIK
  • 22. HOW BEHAT READS GHERKIN? 22 Then I should not see the text :text SPARKFABRIK
  • 23. HOW BEHAT READS GHERKIN? 23 /** * @Then I should not see the text :text */ public function assertNotTextVisible($text) { // Use the Mink Extension step definition. $this->assertPageNotContainsText($text); } Then I should not see the text :text SPARKFABRIK
  • 24. STEP RESULTS 24 /** * @Then I should not see the text :text */ public function assertNotTextVisible($text) { // This step will fail. throw new Exception(‘Test failed’); } • A step FAILS when an Exception is thrown SPARKFABRIK
  • 25. STEP RESULTS 25 /** * @Then I will trigger a success */ public function triggerSuccess() { // This step will pass. print(‘Hello DrupalDay’); } • A step PASS when no Exception are raised SPARKFABRIK
  • 26. OTHER STEP RESULTS 26 • SUCCESSFUL • FAILED • PENDING • UNDEFINED • SKIPPED • AMBIGUOUS • REDUNDANT SPARKFABRIK
  • 27. WHERE ARE THESE STEPS? 27 • STEPS are defined inside plain PHP Object classes, called CONTEXTS • MinkContext and DrupalContext give use a lot of pre-defined steps ready to be used • Custom steps can be defined inside FeatureContext class SPARKFABRIK
  • 28. Sum Up 28 Give use the syntax to write features and scenarios Our framework that reads our scenarios and run tests Classes containing our step definitions GHERKIN BEHAT CONTEXTS SPARKFABRIK
  • 29. How we integrate Behat and Drupal? 29 Behat Drupal Extension An integration layer between Drupal and Behat https://www.drupal.org/project/drupalextension https://github.com/jhedstrom/drupalextension SPARKFABRIK
  • 30. From your project root.. composer require drupal/drupal-extension 30 - Installing drupal/drupal-driver (v1.1.4) Downloading: 100% > DrupalCoreComposerComposer::vendorTestCodeCleanup - Installing symfony/filesystem (v3.0.0) Downloading: 100% > DrupalCoreComposerComposer::vendorTestCodeCleanup - Installing symfony/config (v2.8.0) Downloading: 100% > DrupalCoreComposerComposer::vendorTestCodeCleanup - Installing behat/transliterator (v1.1.0) Loading from cache … … > DrupalCoreComposerComposer::vendorTestCodeCleanup - Installing drupal/drupal-extension (v3.1.3) Downloading: 100% SPARKFABRIK
  • 31. Create file behat.yml 31 1 default: 2 suites: 3 default: 4 contexts: 5 - FeatureContext 6 - DrupalDrupalExtensionContextDrupalContext 7 - DrupalDrupalExtensionContextMinkContext 8 extensions: 9 BehatMinkExtension: 10 goutte: ~ 11 base_url: http://d8.drupalday2015.sparkfabrik.loc # Replace with your site's URL 12 DrupalDrupalExtension: 13 blackbox: ~ see https://github.com/jhedstrom/drupalextension SPARKFABRIK
  • 32. Then --init your test suite 32 vendor/bin/behat --init +d features - place your *.feature files here +d features/bootstrap - place your context classes here +f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here SPARKFABRIK
  • 34. BROWSER INTERACTION • With BDD we write clear, understandable scenario • Our scenario often describe an interaction with the browser 34 WE NEED A BROWSER EMULATOR SPARKFABRIK
  • 35. BROWSER EMULATORS • Headless browser emulators (Goutte) • Browser controllers (Selenium2, SAHI) • They do basically the same thing: control or emulate browsers but they do them in different ways • They comes with their pro and cons 35 SPARKFABRIK
  • 36. MINK! http://mink.behat.org/en/latest/ • MINK removes API differences between different browser emulators • MINK provides different drivers for every browser emulator • MINK gives you an easy way to 1. control the browser 2. traverse pages 3. manipulate page elements 4. interact with page elements 36 SPARKFABRIK
  • 37. 37 /** * @When /^(?:|I )move forward one page$/ */ public function forward() { $this->getSession()->forward(); } MINK! http://mink.behat.org/en/latest/ When I move forward one page SPARKFABRIK
  • 38. Wrap up 38 GHERKIN BEHAT CONTEXTS MINK Give use the syntax to write features and scenarios Our framework that reads our scenarios and run the tests Classes containing our step definitions Describe browser interaction without worrying about the browser SPARKFABRIK
  • 39. 39