BEHAVIOUR DRIVEN
DEVELOPMENT
ALEXANDRU BADIU
BEHAVIOUR DRIVEN DEVELOPMENT
ALEXANDRU BADIU
Drupal developer for 10 years.	

Drupal Romania founding member.	

I work at ...
BDD IS A SECOND-GENERATION,
OUTSIDE–IN, PULL-BASED,
MULTIPLE- STAKEHOLDER,
MULTIPLE-SCALE, 	

HIGH- AUTOMATION, 	

AGILE M...
BEHAVIOUR DRIVEN DEVELOPMENT
WAIT, WHAT?
BEHAVIOUR DRIVEN DEVELOPMENT
TDD’S SHORTCOMINGS

• Unit tests, Inside - out.	

• Write the unit test before the code.	

• ...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD FEATURES

• It picks up where TDD leaves off.	

• Rethinking the approach to unit and acc...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD FEATURES

• Test code or describe behaviour?	

• Both.	

• TDD is about ensuring behaviou...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD FEATURES

• User story.	

• Stakeholder, effect, value.	

• Acceptance criteria or scenar...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD FEATURES
Feature: Authentication!

!
In order to change my information and add sessions!
...
BDD IS A SECONDGENERATION, OUTSIDE–IN,
PULL-BASED, MULTIPLESTAKEHOLDER, MULTIPLE-SCALE, 	

HIGH- AUTOMATION, 	

AGILE METH...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD IN PHP

• Behat.	

• OSS.	

• Cucumber “language”.	

• Mink for testing web apps.	

• Dif...
BEHAVIOUR DRIVEN DEVELOPMENT
COMPOSER.JSON
{!
"require": {!
"behat/behat": "2.4.*@stable",!
"behat/mink": "1.5.*@stable",!...
BEHAVIOUR DRIVEN DEVELOPMENT
INSTALL
curl http://getcomposer.org/installer | php!
php composer.phar install —prefer-source...
BEHAVIOUR DRIVEN DEVELOPMENT
BEHAT.YML
default:!
extensions:!
BehatMinkExtensionExtension:!
base_url: http://drupalcamp.ro...
DEMO
BEHAVIOUR DRIVEN DEVELOPMENT
BDD IN DRUPAL

• Behat Drupal Extension.	

• Provides step definitions for common testing scen...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD IN DRUPAL
composer.json!

!
!
!
!
!

"require": {!
! "drupal/drupal-extension": "*"!
!
},...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD IN DRUPAL
Given I am logged in as a user with the "authenticated
user" role!
!
Then I sho...
BEHAVIOUR DRIVEN DEVELOPMENT
BDD IN DRUPAL
Given "page" nodes:!
| title
|!
| Page one |!
| Page two |!
!
And "article" nod...
THANK YOU
Alexandru Badiu

ALEXANDRUBADIU.RO
We’re hiring!	

AngularJS, Node.js.	

Come talk to me if you’re interested.
Upcoming SlideShare
Loading in...5
×

Behavior Driven Development with Drupal

639

Published on

Talk given at Drupalcamp Tirgu Mures 2013.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
639
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Behavior Driven Development with Drupal

  1. 1. BEHAVIOUR DRIVEN DEVELOPMENT ALEXANDRU BADIU
  2. 2. BEHAVIOUR DRIVEN DEVELOPMENT ALEXANDRU BADIU Drupal developer for 10 years. Drupal Romania founding member. I work at Demotix / Corbis. ! http://alexandrubadiu.ro http://twitter.com/voidberg Drupalcamp Tirgu Mures 2013
  3. 3. BDD IS A SECOND-GENERATION, OUTSIDE–IN, PULL-BASED, MULTIPLE- STAKEHOLDER, MULTIPLE-SCALE, HIGH- AUTOMATION, AGILE METHODOLOGY.
  4. 4. BEHAVIOUR DRIVEN DEVELOPMENT WAIT, WHAT?
  5. 5. BEHAVIOUR DRIVEN DEVELOPMENT TDD’S SHORTCOMINGS • Unit tests, Inside - out. • Write the unit test before the code. • Typically written by the programmer. • Can’t test everything: full functional tests? • Can’t refactor as you wish: dependent on early tests. Drupalcamp Tirgu Mures 2013
  6. 6. BEHAVIOUR DRIVEN DEVELOPMENT BDD FEATURES • It picks up where TDD leaves off. • Rethinking the approach to unit and acceptance testing. • Uses a common language that everyone can use from all chains of command. • Becomes a test, a piece of documentation, a specification. • Supported by a wide range of tools: Gherkin, Cucumber, Behat, Travis, Jenkins, Jira and so on. Drupalcamp Tirgu Mures 2013
  7. 7. BEHAVIOUR DRIVEN DEVELOPMENT BDD FEATURES • Test code or describe behaviour? • Both. • TDD is about ensuring behaviour. • BDD is about describing behaviour. Drupalcamp Tirgu Mures 2013
  8. 8. BEHAVIOUR DRIVEN DEVELOPMENT BDD FEATURES • User story. • Stakeholder, effect, value. • Acceptance criteria or scenarios. • Steps. • Initial conditions. • Triggers. • Outcomes. Drupalcamp Tirgu Mures 2013
  9. 9. BEHAVIOUR DRIVEN DEVELOPMENT BDD FEATURES Feature: Authentication! ! In order to change my information and add sessions! As a registered Drupalcamp user! I need to be able to authenticate! ! Scenario: User login! Given I am on "/"! When I follow "Log in"! And I fill in "name" with "bddtest"! And I fill in "pass" with "bddtest"! And I press "Log in"! Then I should see "My account" ! ! Scenario: User logout! Given I am logged in! And I am on "/"! When I follow "Log out"! Then I should see "Log in" Drupalcamp Tirgu Mures 2013
  10. 10. BDD IS A SECONDGENERATION, OUTSIDE–IN, PULL-BASED, MULTIPLESTAKEHOLDER, MULTIPLE-SCALE, HIGH- AUTOMATION, AGILE METHODOLOGY.
  11. 11. BEHAVIOUR DRIVEN DEVELOPMENT BDD IN PHP • Behat. • OSS. • Cucumber “language”. • Mink for testing web apps. • Different drivers: Selenium, zombie.js, goutte etc. Drupalcamp Tirgu Mures 2013
  12. 12. BEHAVIOUR DRIVEN DEVELOPMENT COMPOSER.JSON {! "require": {! "behat/behat": "2.4.*@stable",! "behat/mink": "1.5.*@stable",! "behat/mink-extension": "*",! "behat/mink-goutte-driver": "*",! "behat/mink-selenium-driver": "*",! "behat/mink-selenium2-driver": "*",! "behat/mink-sahi-driver": "*",! "behat/mink-zombie-driver": "*",! },! "minimum-stability": "dev",! "config": {! "bin-dir": "bin/"! }! }! Drupalcamp Tirgu Mures 2013
  13. 13. BEHAVIOUR DRIVEN DEVELOPMENT INSTALL curl http://getcomposer.org/installer | php! php composer.phar install —prefer-source! ! bin/behat —init! ! +d features - place your *.feature files here! +d features/bootstrap - place bootstrap scripts and static files here! +f features/bootstrap/FeatureContext.php - place your feature related code here Drupalcamp Tirgu Mures 2013
  14. 14. BEHAVIOUR DRIVEN DEVELOPMENT BEHAT.YML default:! extensions:! BehatMinkExtensionExtension:! base_url: http://drupalcamp.ro/! goutte: ~! zombie: ~! sahi:! port: 9999! selenium2:! wd_host: "http://127.0.0.1:4444/wd/hub"! ! default_session: 'selenium2'! javascript_session: 'selenium2'! Drupalcamp Tirgu Mures 2013
  15. 15. DEMO
  16. 16. BEHAVIOUR DRIVEN DEVELOPMENT BDD IN DRUPAL • Behat Drupal Extension. • Provides step definitions for common testing scenarios specific to Drupal sites. Drupalcamp Tirgu Mures 2013
  17. 17. BEHAVIOUR DRIVEN DEVELOPMENT BDD IN DRUPAL composer.json! ! ! ! ! ! "require": {! ! "drupal/drupal-extension": "*"! ! },! behat.yml! ! ! DrupalDrupalExtensionExtension:! blackbox: ~ Drupalcamp Tirgu Mures 2013
  18. 18. BEHAVIOUR DRIVEN DEVELOPMENT BDD IN DRUPAL Given I am logged in as a user with the "authenticated user" role! ! Then I should see the heading “History"! ! Then I should see the heading "User login" in the "left sidebar" region! ! Given the cache has been cleared! ! When I run cron! ! Drupalcamp Tirgu Mures 2013
  19. 19. BEHAVIOUR DRIVEN DEVELOPMENT BDD IN DRUPAL Given "page" nodes:! | title |! | Page one |! | Page two |! ! And "article" nodes:! | title |! | First article |! | Second article |! ! Given "article" nodes:! | title | promote | First article with fields | 1 ! Given users:! | name | mail | status | Joe User | joe@example.com | 1 | body |! | PLACEHOLDER BODY |! |! | Drupalcamp Tirgu Mures 2013
  20. 20. THANK YOU Alexandru Badiu ALEXANDRUBADIU.RO
  21. 21. We’re hiring! AngularJS, Node.js. Come talk to me if you’re interested.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×