YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Behat 3.0 meetup (March)

behat

Page 2: Behat 3.0 meetup (March)

current state

Page 3: Behat 3.0 meetup (March)

468 631 installssince v2.2 (2011-12-14)

Page 4: Behat 3.0 meetup (March)

SyliusOpenSource E-commerce framework

Page 5: Behat 3.0 meetup (March)

akeneoOpenSource PIM framework

Page 6: Behat 3.0 meetup (March)

OpenScholarOpenSource site builder for academic institutions

Page 7: Behat 3.0 meetup (March)

Drupal.orgBig migration driven by Melissa Anderson

Page 8: Behat 3.0 meetup (March)

INVIQAEnterprise OpenSource agency

Page 9: Behat 3.0 meetup (March)

The BDD in PHP is big!

Page 10: Behat 3.0 meetup (March)

Behat

Page 11: Behat 3.0 meetup (March)
Page 12: Behat 3.0 meetup (March)
Page 13: Behat 3.0 meetup (March)
Page 14: Behat 3.0 meetup (March)
Page 15: Behat 3.0 meetup (March)

1. parallel execution

Page 16: Behat 3.0 meetup (March)
Page 17: Behat 3.0 meetup (March)

2. growing contexts

Page 18: Behat 3.0 meetup (March)

– Me

“Context class is your domain dictionary for a specific actor”

Page 19: Behat 3.0 meetup (March)

– Me

“There’s only one context class for all your features.”

Page 20: Behat 3.0 meetup (March)
Page 21: Behat 3.0 meetup (March)

3. actor-based definitions

Page 22: Behat 3.0 meetup (March)

3 problems, 1 solution

Page 23: Behat 3.0 meetup (March)

you should be able to test features against different

contexts

Page 24: Behat 3.0 meetup (March)

v2.x architecture

Page 25: Behat 3.0 meetup (March)

profile

Page 26: Behat 3.0 meetup (March)

profile

.feature #1

Page 27: Behat 3.0 meetup (March)

profile

.feature #1

.feature #2

.feature #3

Page 28: Behat 3.0 meetup (March)

profile

.feature #1

.feature #2

.feature #3

Your Context class (+ Sub-Context classes)

Page 29: Behat 3.0 meetup (March)

Context class !

definitions transformations

hooks

Page 30: Behat 3.0 meetup (March)

Context class !

definitions transformations

hooksBehat

Page 31: Behat 3.0 meetup (March)

Context class !

definitions transformations

hooksBehat

Page 32: Behat 3.0 meetup (March)
Page 33: Behat 3.0 meetup (March)

profile

Page 34: Behat 3.0 meetup (March)

profile

suite #1

Page 35: Behat 3.0 meetup (March)

profile

suite #1

suite #2

Page 36: Behat 3.0 meetup (March)

Suite is a collection of features and their

test configuration

Page 37: Behat 3.0 meetup (March)

profile

suite #1

suite #2

.feature #1

.feature #2

Your Context class

Page 38: Behat 3.0 meetup (March)

profile

suite #1

suite #2

.feature #1

.feature #2

Your Context class

.feature #3

.feature #4

Your other Context class

Page 39: Behat 3.0 meetup (March)

profile

suite #1

suite #2

.feature #1

.feature #2

Your Context class

.feature #1

.feature #2

Your other Context class

Page 40: Behat 3.0 meetup (March)

suite configthrough behat.yml

Page 41: Behat 3.0 meetup (March)

suite configthrough behat.yml

Page 42: Behat 3.0 meetup (March)

stop! demo time.

Page 43: Behat 3.0 meetup (March)

contexts

Page 44: Behat 3.0 meetup (March)

profile

suite #1

suite #2

.feature #1

.feature #2

Your Context class

.feature #1

.feature #2

Your other Context class

Page 45: Behat 3.0 meetup (March)

profile

suite #1

suite #2

.feature #1

.feature #2

Your Context classes

.feature #1

.feature #2

Your other Context classes

Page 46: Behat 3.0 meetup (March)

contexts configthrough behat.yml

Page 47: Behat 3.0 meetup (March)

contexts configthrough behat.yml

Page 48: Behat 3.0 meetup (March)

demo

Page 49: Behat 3.0 meetup (March)

definitions matching

Page 50: Behat 3.0 meetup (March)

@When /^(?:|I )fill in "(?P<field>(?:[^"]|\\")*)" with "(?P<value>(?:[^"]|\\")*)"$/

Page 51: Behat 3.0 meetup (March)

regexp’s are hard

Page 52: Behat 3.0 meetup (March)

TurnipGherkin extension for RSpec

Page 53: Behat 3.0 meetup (March)

Turnip matchingthrough placeholders

Page 54: Behat 3.0 meetup (March)

@Given there is a monster called :name

Page 55: Behat 3.0 meetup (March)

@Given there is a monster called :nameGiven there is a monster called “Jake”

Page 56: Behat 3.0 meetup (March)

@Given there is a monster called :nameGiven there is a monster called “Jake” Given there is a monster called ‘Jake’

Page 57: Behat 3.0 meetup (March)

@Given there is a monster called :nameGiven there is a monster called “Jake” Given there is a monster called ‘Jake’ Given there is a monster called Jake

Page 58: Behat 3.0 meetup (March)

@Given there is a monster called :nameGiven there is a monster called “Jake” Given there is a monster called ‘Jake’ Given there is a monster called Jake

Given there is a monster called 23

Page 59: Behat 3.0 meetup (March)

@Given there is/are :count monster(s)

Page 60: Behat 3.0 meetup (March)

@Given there is/are :count monster(s)Given there is 1 monster

Page 61: Behat 3.0 meetup (March)

@Given there is/are :count monster(s)Given there is 1 monster

Given there are 5 monsters

Page 62: Behat 3.0 meetup (March)

@Given there is/are :count monster(s)Given there is 1 monster

Given there are 5 monsters Given there are no monsters

Page 63: Behat 3.0 meetup (March)

Turnip is a new default

Page 64: Behat 3.0 meetup (March)

both turnip and regex are supported

Page 65: Behat 3.0 meetup (March)

both turnip and regex are supported

inside same context class

Page 66: Behat 3.0 meetup (March)

SnippetsAcceptingContext

Page 67: Behat 3.0 meetup (March)

demo

Page 68: Behat 3.0 meetup (March)

Hooks are the 1st class citizens

Page 69: Behat 3.0 meetup (March)

hooks blowupin v2.x

Page 70: Behat 3.0 meetup (March)

demo

Page 71: Behat 3.0 meetup (March)

Formatters

Page 72: Behat 3.0 meetup (March)

rewritten from scratch

Page 73: Behat 3.0 meetup (March)

outline shows step that failed

Page 74: Behat 3.0 meetup (March)

outline steps expand

Page 75: Behat 3.0 meetup (March)

and 1000 other small improvements

Page 76: Behat 3.0 meetup (March)

output buffering

Page 77: Behat 3.0 meetup (March)

$this->printDebug(‘…’)

Page 78: Behat 3.0 meetup (March)

demo

Page 79: Behat 3.0 meetup (March)

Error handling levels

Page 80: Behat 3.0 meetup (March)

-v

Page 81: Behat 3.0 meetup (March)

exception handlingwith Mink or other integrations

Page 82: Behat 3.0 meetup (March)

exception handlingwith standard exceptions

Page 83: Behat 3.0 meetup (March)

-v is not --vv

Page 84: Behat 3.0 meetup (March)

how

Page 85: Behat 3.0 meetup (March)

continuous integrationthrough TravisCI

Page 86: Behat 3.0 meetup (March)

continuous integrationthrough Scrutinizer

Page 87: Behat 3.0 meetup (March)

v3in one picture

Page 88: Behat 3.0 meetup (March)

Testwork

Page 89: Behat 3.0 meetup (March)

last demo

Page 90: Behat 3.0 meetup (March)

next steps

Page 91: Behat 3.0 meetup (March)

3.0.0 rc3 releasedand it is gold version

Page 92: Behat 3.0 meetup (March)

behat.orgv2.0 is coming

Page 93: Behat 3.0 meetup (March)

extensionsupgrade

Page 94: Behat 3.0 meetup (March)

and release…

Page 95: Behat 3.0 meetup (March)

20 april

Page 96: Behat 3.0 meetup (March)

20 april 2014

Page 97: Behat 3.0 meetup (March)

big thanks to

Page 98: Behat 3.0 meetup (March)

Aslak Hellesøy

Creator of Cucumber

Page 99: Behat 3.0 meetup (March)

Christophe Coevoet

@stof

Page 100: Behat 3.0 meetup (March)
Page 101: Behat 3.0 meetup (March)
Page 102: Behat 3.0 meetup (March)

Questions?


Related Documents