bdd в php с behat и mink

120
BDD в php

Upload: konstantin-kudryashov

Post on 10-May-2015

5.941 views

Category:

Technology


9 download

DESCRIPTION

История и примеры использования BDD в PHP и ZF с помощью Behat и Mink.

TRANSCRIPT

Page 1: BDD в PHP с Behat и Mink

BDD в php

Page 2: BDD в PHP с Behat и Mink

Яктотакой

everzetsenior from-birth web

developer в

@

Page 3: BDD в PHP с Behat и Mink

Яктотакой

senior from-birth web developer в

International speakerРазработчик Behat, MinkРазработчик jade.phpРазработчик capifonyCore-contributor Symfony2 frameworkРазработчик плагинов symfony и Symfony2

[email protected]

http://github.com/everzethttp://card.everzet.com

everzet@

Page 4: BDD в PHP с Behat и Mink

BDD, Symfony2 эксперты

Активные контрибуторы в open-source проекты

Консультанты, аудиторы, тренеры

http://knplabs.com

Page 5: BDD в PHP с Behat и Mink

Историятестирования

Page 6: BDD в PHP с Behat и Mink

UnitTest

История

Автом

атизаци

я тестов

Page 7: BDD в PHP с Behat и Mink

UnitTest TDD

Тесты

вперед

История

Автом

атизаци

я тестов

Page 8: BDD в PHP с Behat и Mink

UnitTest TDD

Dan N

orth

BDD

История

Тесты

вперед

Автом

атизаци

я тестов

Page 9: BDD в PHP с Behat и Mink

BDD ⎯ эволюция TDD

Page 10: BDD в PHP с Behat и Mink

- Эволюция-хренолюция... Что не так с TDD?

Page 11: BDD в PHP с Behat и Mink

Test-Driven Development

Page 12: BDD в PHP с Behat и Mink

Test-Driven Development

Мы на самом деле говорим о тестах???Но каким образом тестировать то, чего еще нет?

Page 13: BDD в PHP с Behat и Mink

Test-Driven Development

дизайнеНа самом деле, мы говорим о

Page 14: BDD в PHP с Behat и Mink

Test-Driven DevelopmentBehavior

© 2003, Dan North

Page 15: BDD в PHP с Behat и Mink

BDD был создан как наборконвенций поверхTDD

Page 16: BDD в PHP с Behat и Mink

Тест-кейсы должы составлять предложения

BDD был создан как наборконвенций поверхTDD

testFindsCustomerById()testFailsForDuplicateCustomers()

Page 17: BDD в PHP с Behat и Mink

testFindsCustomerById()testFailsForDuplicateCustomers()

Тест-кейсы должны начинаться со слова “should”shouldFindCustomerById()shouldFailForDuplicateCustomers()

BDD был создан как наборконвенций поверхTDD

Тест-кейсы должы составлять предложения

Page 18: BDD в PHP с Behat и Mink

shouldFindCustomerById()shouldFailForDuplicateCustomers()

Класс тест-кейсов должен представлять из себя существительное для кейсов

class CustomerTableTest extends \PHPUnitTestCase{ /** * @Test */ shouldFindCustomerById() ...}

BDD был создан как наборконвенций поверхTDD

Тест-кейсы должны начинаться со слова “should”

Тест-кейсы должы составлять предложенияtestFindsCustomerById()testFailsForDuplicateCustomers()

Page 19: BDD в PHP с Behat и Mink

АССЕРШЕНЫтоже TEST-ориентированы

Page 20: BDD в PHP с Behat и Mink

assertEquals($expected, $actual)

assertGreaterThan($expected, $actual)

assertInstanceOf($class, $actual)

АССЕРШЕНЫтоже TEST-ориентированы

ТЕСТируем

Page 21: BDD в PHP с Behat и Mink

assertEquals($expected, $actual)

assertGreaterThan($expected, $actual)

assertInstanceOf($class, $actual)

$actual should be Equals to $expected

$actual should be GreaterThan $expected

$actual should be InstanceOf $class

Описываем

АССЕРШЕНЫтоже TEST-ориентированы

ТЕСТируем

Page 22: BDD в PHP с Behat и Mink

SpecификационныеBDD Фрэймворки

Page 23: BDD в PHP с Behat и Mink

*Spec

RSpec by Dave Astels

Page 24: BDD в PHP с Behat и Mink

*Spec

RSpec by Dave Astels

JSpec by TJ Holowaychuk

Page 25: BDD в PHP с Behat и Mink

*Spec

RSpec by Dave Astels

JSpec by TJ Holowaychuk

Fabulous by Alex Rudakov

Page 26: BDD в PHP с Behat и Mink

RSpec

# bowling_spec.rbrequire 'bowling'

describe Bowling, "#score" do it "returns 0 for all gutter game" do bowling = Bowling.new 20.times { bowling.hit(0) } bowling.score.should == 0 endend

Page 27: BDD в PHP с Behat и Mink

RSpec

# bowling_spec.rbrequire 'bowling'

describe Bowling, "#score" do it "returns 0 for all gutter game" do bowling = Bowling.new 20.times { bowling.hit(0) } bowling.score.should == 0 endend

Пишем СПЕЦИФИКАЦИЮ, а не UnitTEST

Page 28: BDD в PHP с Behat и Mink

UnitTest TDD

Spec BDDСначала дизайн

Dan N

orth

BDD

История

Тесты

вперед

Автом

атизаци

я тестов

Page 30: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

СЛОВАРЬ

Page 31: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

для те

стеро

в

СЛОВАРЬ

Page 32: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

для аналитиков

СЛОВАРЬ

для те

стеро

в

Page 33: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

для де

вело

перо

в СЛОВАРЬ для аналитиков

для те

стеро

в

Page 34: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

для заказчиков

СЛОВАРЬ

для де

вело

перо

в для аналитиков

для те

стеро

в

Page 35: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

1СЛОВАРЬ

для заказчиков

для де

вело

перо

в для аналитиков

для те

стеро

в

Page 36: BDD в PHP с Behat и Mink

photo by dsearlsphoto by Horia Varlan

тестер

ы

аналитики

девелоперызаказчики

ИСКОРЕНИТ множество проблемДИЗАЙНА и КОММУНИКАЦИЙ

1СЛОВАРЬ

Page 37: BDD в PHP с Behat и Mink

КОММУНИКАЦИИ

photo by joshfassbind.com

Page 38: BDD в PHP с Behat и Mink

In order to [A]As a [B]I need [C]

Наратив:

Page 39: BDD в PHP с Behat и Mink

Чтобы [A]В качестве [B]Мне нужно [C]

Наратив:

Page 40: BDD в PHP с Behat и Mink

A ⎯ добавочное знач. (профит) функционала B ⎯ профитирующая персона (роль)C ⎯ функционал

Чтобы [A]В качестве [B]Мне нужно [C]

Наратив:

Page 41: BDD в PHP с Behat и Mink

⎯ Сила данной конструкции в том, что она требует определения профита от функционала еще до его реализации

© Dan North

A ⎯ добавочное знач. (профит) функционала B ⎯ профитирующая персона (роль)C ⎯ функционал

Чтобы [A]В качестве [B]Мне нужно [C]

Наратив:

Page 42: BDD в PHP с Behat и Mink

Поведение story ⎯ это ее приемочный критерий!⎯ если система удовлетворяет все приемочные критерии, то она работает верно; если не выполняет - неверно.

Page 43: BDD в PHP с Behat и Mink

In order to ...As a ...I need ...

Story:

Page 44: BDD в PHP с Behat и Mink

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

In order to ...As a ...I need ...

Story:

Page 45: BDD в PHP с Behat и Mink

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

Story:In order to ...As a ...I need ...

Page 46: BDD в PHP с Behat и Mink

Scenario 1:

Scenario 2:

Story:

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

In order to ...As a ...I need ...

Page 47: BDD в PHP с Behat и Mink

UnitTest TDD

Spec BDD

Scenario BDD

Сначал

а анализ

Dan N

orth

BDD

История

Сначала дизайн

Тесты

вперед

Автом

атизаци

я тестов

Page 48: BDD в PHP с Behat и Mink

Сначал

а анализ

Сначала дизайн

UnitTest TDD

Spec BDD

Scenario BDD

Dan N

orth

BDD

История

Тесты

вперед

Автом

атизаци

я тестов

+

Page 50: BDD в PHP с Behat и Mink

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

In order to ...As a ...I need ...

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

Scenario 1:

Scenario 2:

Story:

Page 51: BDD в PHP с Behat и Mink

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

In order to ...As a ...I need ...

Given some initial context (the givens),When an event occurs,Then ensure some outcomes.

Scenario: 1st scenario title

Scenario: 2nd scenario title

Feature: Feature description

Page 52: BDD в PHP с Behat и Mink

1. feature2.

sce

nario

3. step......

2. s

cena

rio

3. step......

Given some initial context (the givens)When an event occursThen ensure some outcomes

In order to ...As a ...I need ...

Given some initial context (the givens)When an event occursThen ensure some outcomes

Scenario: 1st scenario title

Scenario: 2nd scenario title

Feature: Feature descriptionfeature tree

Page 53: BDD в PHP с Behat и Mink

Given some initial context (the givens)When an event occursThen ensure some outcomes

In order to ...As a ...I need ...

Given some initial context (the givens)When an event occursThen ensure some outcomes

Scenario: 1st scenario title

Scenario: 2nd scenario title

Feature: Feature description

Page 54: BDD в PHP с Behat и Mink

Etant donné some initial context (the givens)Lorsque an event occursAlors ensure some outcomes

In order to ...As a ...I need ...

Etant donné some initial context (the givens)Lorsque an event occursAlors ensure some outcomes

Scénario: 1st scenario title

Scénario: 2nd scenario title

Fonctionnalité: Feature description# language: fr

Page 55: BDD в PHP с Behat и Mink

ならば some initial context (the givens)しかし an event occurs前提 ensure some outcomes

In order to ...As a ...I need ...

ならば some initial context (the givens)しかし an event occurs前提 ensure some outcomes

シナリオ: 1st scenario title

シナリオ: 2nd scenario title

フィーチャ: Feature description# language: ja

Page 56: BDD в PHP с Behat и Mink

Допустим some initial context (the givens)Когда an event occursТо ensure some outcomes

In order to ...As a ...I need ...

Допустим some initial context (the givens)Когда an event occursТо ensure some outcomes

Сценарий: 1st scenario title

Сценарий: 2nd scenario title

Функционал: Feature description# language: ru

Page 57: BDD в PHP с Behat и Mink

Let go and haul some initial context (the givens)Blimey! an event occursAye ensure some outcomes

In order to ...As a ...I need ...

Let go and haul some initial context (the givens)Blimey! an event occursAye ensure some outcomes

Heave to: 1st scenario title

Heave to: 2nd scenario title

Ahoy matey!: Feature description# language: en-pirate

Page 58: BDD в PHP с Behat и Mink

Let go and haul some initial context (the givens)Blimey! an event occursAye ensure some outcomes

Let go and haul some initial context (the givens)Blimey! an event occursAye ensure some outcomes

Heave to:

Heave to:

Ahoy matey!:# language: en-pirate

Page 59: BDD в PHP с Behat и Mink

Приемочные критериидолжны быть исполняемы!

Page 60: BDD в PHP с Behat и Mink
Page 61: BDD в PHP с Behat и Mink

Установка

1. Добавляем pear-channel:$ pear channel-discover pear.behat.org

2. Ставим:$ pear install behat/behat

3. Инициализируем:$ cd path/to/project && behat --init

Page 62: BDD в PHP с Behat и Mink

Установка

1. Добавляем pear-channel:$ pear channel-discover pear.behat.org

2. Ставим:$ pear install behat/behat

3. Инициализируем:$ cd path/to/project && behat --init

+d features - place your *.feature files here

+d features/steps - place step definition files here

+f features/steps/steps.php - place some step definitions in this file

+d features/support - place support scripts and static files here

+f features/support/bootstrap.php - place bootstrap scripts in this file

+f features/support/env.php - place environment initialization scripts in this file

Page 63: BDD в PHP с Behat и Mink

# language: ruФункционал: Утилита lsЧтобы узнать содержимое директорииКак пользователь UNIXЯ должен иметь утилиту листинга директорий

Page 64: BDD в PHP с Behat и Mink

Сценарий: 2 файла в директории

Чтобы узнать содержимое директорииКак пользователь UNIXЯ должен иметь утилиту листинга директорий

# language: ruФункционал: Утилита ls

Page 65: BDD в PHP с Behat и Mink

Допустим я нахожусь в директории “test1”Если я исполню “ls”То я должен увидеть:

Сценарий: 2 файла в директории

Чтобы узнать содержимое директорииКак пользователь UNIXЯ должен иметь утилиту листинга директорий

# language: ruФункционал: Утилита ls

""" file_one.txt file_foo.txt """

Page 66: BDD в PHP с Behat и Mink

1. feature2.

sce

nario

Допустим я нахожусь в директории “test1”Если я исполню “ls”То я должен увидеть:

Сценарий: 2 файла в директории

Чтобы узнать содержимое директорииКак пользователь UNIXЯ должен иметь утилиту листинга директорий

# language: ruФункционал: Утилита ls

""" file_one.txt file_foo.txt """

Page 67: BDD в PHP с Behat и Mink

Допустим я нахожусь в директории “test1”Если я исполню “ls”То я должен увидеть:

Сценарий: 2 файла в директории

Чтобы узнать содержимое директорииКак пользователь UNIXЯ должен иметь утилиту листинга директорий

# language: ruФункционал: Утилита ls

""" file_one.txt file_foo.txt """

Page 68: BDD в PHP с Behat и Mink

Допустим я нахожусь в директории “test1”

ОПРЕДЕЛЕНИЯШАГОВ

Page 69: BDD в PHP с Behat и Mink

<?php

Допустим('/^я нахожусь в директории “(.*)”$/');

ОПРЕДЕЛЕНИЯШАГОВ

Допустим я нахожусь в директории “test1”

Page 70: BDD в PHP с Behat и Mink

<?php

Допустим('/^я нахожусь в директории “(.*)”$/', function() { throw new \Behat\Behat\Exception\Pending(); });

ОПРЕДЕЛЕНИЯШАГОВ

Допустим я нахожусь в директории “test1”

Page 71: BDD в PHP с Behat и Mink

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function() { throw new \Behat\Behat\Exception\Pending(); });

ОПРЕДЕЛЕНИЯШАГОВ

Допустим я нахожусь в директории “test1”

Page 72: BDD в PHP с Behat и Mink

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function() { throw new \Behat\Behat\Exception\Pending(); });

???

ОПРЕДЕЛЕНИЯШАГОВ

Допустим я нахожусь в директории “test1”

Page 73: BDD в PHP с Behat и Mink

ТИПЫРЕЗУЛЬТАТОВШАГОВ

Page 74: BDD в PHP с Behat и Mink

ТИПЫРЕЗУЛЬТАТОВШАГОВ

1. Pending шаг ⎯ который throw new \Behat\Behat\Exception\Pending();

Page 75: BDD в PHP с Behat и Mink

1. Pending шаг ⎯ который throw new \Behat\Behat\Exception\Pending();

2. Undefined шаг ⎯ у которого нет (не найдено) определений

ТИПЫРЕЗУЛЬТАТОВШАГОВ

Page 76: BDD в PHP с Behat и Mink

1. Pending шаг ⎯ который throw new \Behat\Behat\Exception\Pending();

2. Undefined шаг ⎯ у которого нет (не найдено) определений

3. Ambiguous шаг ⎯ который подпадает под несколько определений

ТИПЫРЕЗУЛЬТАТОВШАГОВ

Page 77: BDD в PHP с Behat и Mink

1. Pending шаг ⎯ который throw new \Behat\Behat\Exception\Pending();

2. Undefined шаг ⎯ у которого нет (не найдено) определений

3. Ambiguous шаг ⎯ который подпадает под несколько определений

4. Failed шаг ⎯ который throw \Exception();

ТИПЫРЕЗУЛЬТАТОВШАГОВ

Page 78: BDD в PHP с Behat и Mink

1. Pending шаг ⎯ который throw new \Behat\Behat\Exception\Pending();

2. Undefined шаг ⎯ у которого нет (не найдено) определений

3. Ambiguous шаг ⎯ который подпадает под несколько определений

4. Failed шаг ⎯ который throw \Exception();

5. Skipped шаг ⎯ который идет следом за pending/undefined/failed в сценарии

ТИПЫРЕЗУЛЬТАТОВШАГОВ

Page 79: BDD в PHP с Behat и Mink

1. Pending шаг ⎯ который throw new \Behat\Behat\Exception\Pending();

2. Undefined шаг ⎯ у которого нет (не найдено) определений

3. Ambiguous шаг ⎯ который подпадает под несколько определений

4. Failed шаг ⎯ который throw \Exception();

5. Skipped шаг ⎯ который идет следом за pending/undefined/failed в сценарии

6. Passed шаг ⎯ который не кидает эксепшенов

ТИПЫРЕЗУЛЬТАТОВШАГОВ

Page 80: BDD в PHP с Behat и Mink

ОПРЕДЕЛЕНИЯШАГОВ

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function() { throw new \Behat\Behat\Exception\Pending(); });

Допустим я нахожусь в директории “test1”

Page 81: BDD в PHP с Behat и Mink

ОПРЕДЕЛЕНИЯШАГОВ

Если я исполню “ls”

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function() { throw new \Behat\Behat\Exception\Pending(); });

Допустим я нахожусь в директории “test1”

Page 82: BDD в PHP с Behat и Mink

<?php

$steps->Если('/^я исполню “(.*)”$/', function($dollars) { throw new \Behat\Behat\Exception\Pending(); });

ОПРЕДЕЛЕНИЯШАГОВ

Если я исполню “ls”

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function() { throw new \Behat\Behat\Exception\Pending(); });

Допустим я нахожусь в директории “test1”

Page 83: BDD в PHP с Behat и Mink

<?php

$steps->Если('/^я исполню “(.*)”$/', function($command) { // $command === “ls” });

ОПРЕДЕЛЕНИЯШАГОВ

Если я исполню “ls”

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function($dir) { // $dir === “test1” });

Допустим я нахожусь в директории “test1”

Page 84: BDD в PHP с Behat и Mink

<?php

$steps->Если('/^я исполню “(.*)”$/', function($command) { exec($command, $output); $output = trim(implode(“\n”, $output)); });

ОПРЕДЕЛЕНИЯШАГОВ

Если я исполню “ls”

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function($dir) { chdir('fixtures/' . $dir); });

Допустим я нахожусь в директории “test1”

Page 85: BDD в PHP с Behat и Mink

<?php

$steps->Если('/^я исполню “(.*)”$/', function($world, $command) { exec($command, $output); $world->output = trim(implode(“\n”, $output)); });

ОПРЕДЕЛЕНИЯШАГОВ

Если я исполню “ls”

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function($world, $dir) { chdir('fixtures/' . $dir); });

Допустим я нахожусь в директории “test1”

Page 86: BDD в PHP с Behat и Mink

ПРОВЕРЯЕМРЕЗУЛЬТАТЫ

То я должен увидеть:

Page 87: BDD в PHP с Behat и Mink

<?php

$steps->То('/^я должен увидеть:$/', function($world, $string) { if ($world->output !== (string) $string) { throw new \Exception('Неверный вывод'); } });

ПРОВЕРЯЕМРЕЗУЛЬТАТЫ

То я должен увидеть:

Page 88: BDD в PHP с Behat и Mink

<?php

$steps->То('/^я должен увидеть:$/', function($world, $string) { assertEquals((string) $string, $world->output); });

usingPHPUnit

<?php

$steps->То('/^я должен увидеть:$/', function($world, $string) { if ($world->output !== (string) $string) { throw new \Exception('Неверный вывод'); } });

ПРОВЕРЯЕМРЕЗУЛЬТАТЫ

То я должен увидеть:

То я должен увидеть: ( )

Page 89: BDD в PHP с Behat и Mink

<?php

$steps->Допустим('/^я нахожусь в директории “(.*)”$/', function($world, $dir) { chdir('fixtures/' . $dir); });

$steps->Если('/^я исполню “(.*)”$/', function($world, $command) { exec($command, $output); $world->output = trim(implode(“\n”, $output)); });

$steps->То('/^я должен увидеть:$/', function($world, $string) { assertEquals((string) $string, $world->output); });

ОПРЕДЕЛЕНИЯШАГОВ

Page 90: BDD в PHP с Behat и Mink

<?php

$steps->

Допустим('/^я нахожусь в директории “(.*)”$/', function($world, $dir) { chdir('fixtures/' . $dir); } )->

Если('/^я исполню “(.*)”$/', function($world, $command) { exec($command, $output); $world->output = trim(implode(“\n”, $output)); } )->

То('/^я должен увидеть:$/', function($world, $string) { assertEquals((string) $string, $world->output); } );

ОПРЕДЕЛЕНИЯШАГОВ

Page 91: BDD в PHP с Behat и Mink

1. Описываем поведение

Workflow

Page 92: BDD в PHP с Behat и Mink

$ behat features/

1. Описываем поведение2. Проверяем поведение ( )

Workflow

Page 93: BDD в PHP с Behat и Mink

$ behat features/

1. Описываем поведение2. Проверяем поведение ( )3. Реализуем поведение

Workflow

Page 94: BDD в PHP с Behat и Mink

$ behat features/

1. Описываем поведение2. Проверяем поведение ( )

4. Проверяем поведение3. Реализуем поведение

Workflow

Page 95: BDD в PHP с Behat и Mink

$ behat features/

1. Описываем поведение2. Проверяем поведение ( )

4. Проверяем поведение3. Реализуем поведение

Workflow

Page 96: BDD в PHP с Behat и Mink

3.1. Пишем спеки

$ behat features/

1. Описываем поведение2. Проверяем поведение ( )

3.4. Прогоняем спеки3.3. Пишем код3.2. Прогоняем спеки

4. Проверяем поведение

3. Реализуем поведение:

Workflow

Page 97: BDD в PHP с Behat и Mink

3.1. Пишем спеки

$ behat features/

1. Описываем поведение

3.4. Прогоняем спеки3.3. Пишем код3.2. Прогоняем спеки

3. Реализуем поведение:2. Проверяем поведение ( )

4. Проверяем поведение

Workflow

Page 98: BDD в PHP с Behat и Mink

Описание web-приложений

Page 99: BDD в PHP с Behat и Mink

M!"#

Page 100: BDD в PHP с Behat и Mink

Установка

1. Добавляем pear-channel:$ pear channel-discover pear.behat.org

2. Ставим:$ pear install behat/mink-beta

Page 101: BDD в PHP с Behat и Mink

<?php

use Behat\Mink\Mink, Behat\Mink\Session, Behat\Mink\Driver\GoutteDriver, Behat\Mink\Driver\SahiDriver;

// инициализируем Mink и сессии$mink = new Mink();$mink->registerSession('goutte', new Session(new GoutteDriver($startUrl)));$mink->registerSession('javascript',, new Session(new SahiDriver($startUrl, 'firefox')));

// выполняем действия в стандартном драйвере$mink->getSession('goutte')->getPage()->clickLink('Downloads');echo $mink->getSession('goutte')->getPage()->getContent();

// выполняем действия в javascript (Sahi) сессии$mink->getSession('javascript')->getPage()->clickLink('Downloads');echo $mink->getSession('javascript')->getPage()->getContent();

Page 102: BDD в PHP с Behat и Mink

Новый проект

1. Создаем каркас проекта:$ cd path/to/project && zf ...

Page 103: BDD в PHP с Behat и Mink

Новый проект

1. Создаем каркас проекта:$ cd path/to/project && zf ...

Getting Started with Zend Framework

By Rob Allen, www.akrabat.comDocument Revision 1.7.6Copyright © 2006, 2010

Page 104: BDD в PHP с Behat и Mink
Page 105: BDD в PHP с Behat и Mink
Page 106: BDD в PHP с Behat и Mink

Новый проект

1. Создаем каркас проекта:$ cd path/to/project && zf ...

2. Инициализируем B$%&':$ behat --init

Page 107: BDD в PHP с Behat и Mink

Новый проект

3. Знакомим B$%&' с M!"#:$ vim behat.yml

# behat.yml

default:

environment:

parameters:

start_url: http://tutorial.zf.dev/

imports:

- mink/behat.yml

$ vim features/support/bootstrap.php

<?php

// features/support/bootstrap.php

require_once 'PHPUnit/Autoload.php';

require_once 'PHPUnit/Framework/Assert/Functions.php';

require_once 'mink/autoload.php';

$ behat --steps --lang ru

Page 108: BDD в PHP с Behat и Mink

Чтобы иметь представление об исполнителях Как каталогизатор Я должен уметь управлять коллекцией альбомов

Сценарий: Добавление альбомаДопустим я на странице /index/addЕсли я ввожу "Pendulum" в поле "Artist"И я ввожу "In Silico" в поле "Title"И нажимаю "Add"То я должен видеть "In Cilico"И я должен видеть "Edit"

# language: ruФункционал: Альбомы

Page 109: BDD в PHP с Behat и Mink
Page 110: BDD в PHP с Behat и Mink

Чтобы иметь представление об исполнителях Как каталогизатор Я должен уметь управлять коллекцией альбомов

Сценарий: Добавление альбомаДопустим я на странице /index/addЕсли я ввожу "Pendulum" в поле "Artist"И я ввожу "In Silico" в поле "Title"И нажимаю "Add"То я должен видеть "In Cilico"И я должен видеть "Edit"

# language: ruФункционал: Альбомы

Page 111: BDD в PHP с Behat и Mink
Page 112: BDD в PHP с Behat и Mink
Page 113: BDD в PHP с Behat и Mink

Чтобы иметь представление об исполнителях Как каталогизатор Я должен уметь управлять коллекцией альбомов

Сценарий: Добавление альбомаДопустим в базе нет альбомовИ я на странице /index/addЕсли я ввожу "Pendulum" в поле "Artist"И я ввожу "In Silico" в поле "Title"И нажимаю "Add"То я должен видеть "In Silico"И я должен видеть "Edit"

# language: ruФункционал: Альбомы

Page 114: BDD в PHP с Behat и Mink
Page 115: BDD в PHP с Behat и Mink

<?php# features/support/bootstrap.php

// Конфигурация и инициализация тестовой среды ZF

<?php# features/steps/steps.php$steps->Допустим('/^в базе нет альбомов$/', function($world) { $albums = new Application_Model_DbTable_Albums(); $albums->delete(1); });

Page 116: BDD в PHP с Behat и Mink

Чтобы иметь представление об исполнителях Как каталогизатор Я должен уметь управлять коллекцией альбомов

Сценарий: Добавление альбомаДопустим в базе нет альбомовИ я на странице /index/addЕсли я ввожу "Pendulum" в поле "Artist"И я ввожу "In Silico" в поле "Title"И нажимаю "Add"То я должен видеть "In Silico"И я должен видеть "Edit"

# language: ruФункционал: Альбомы

Page 117: BDD в PHP с Behat и Mink

Чтобы иметь представление об исполнителях Как каталогизатор Я должен уметь управлять коллекцией альбомов

@javascriptСценарий: Добавление альбомаДопустим в базе нет альбомовИ я на странице /index/addЕсли я ввожу "Pendulum" в поле "Artist"И я ввожу "In Silico" в поле "Title"И нажимаю "Add"То я должен видеть "In Silico"И я должен видеть "Edit"

# language: ruФункционал: Альбомы

Page 118: BDD в PHP с Behat и Mink

http://B$%&'.org

Page 120: BDD в PHP с Behat и Mink

Вопросы?

http://github.com/behat

http://knplabs.com/trainingshttp://groups.google.com/behat