PHP:BDDを試す。Behat+Mink編
BDDに興味をもったのでまずはbehatを試してみる。
Video: Quickstart to testing with Behat, Mink, and Selenium
上記の動画を参考に写経。
今回の構成
■開発サーバ
OS:CentOS6.5(Vagrant環境:windows7内にある)
IP:192.168.1.226
■composerの設定
適当なフォルダに移動してcomposer.jsonを作成する。
※composer自体はインストールしてるとする。
$ vim composer.json
{
"require": {
"behat/behat": "2.4.*@stable",
"behat/mink": "1.5.*@stable",
"behat/mink-goutte-driver": "*",
"behat/mink-extension": "*",
"behat/mink-selenium2-driver": "*"
}
}
■behat,minkのインストール
$ php composer.phar install
■behatの設定ファイルであるbehat.ymlを作成
composer.jsonと同じ場所にbehat.ymlを作成する。
$ vim behat.yml
default:
paths:
features: features
bootstrap: %behat.paths.features%/bootstrap
extensions:
Behat\MinkExtension\Extension:
goutte: ~
■behatを初期化(featuresフォルダが作成される)
$ ./vender/bin/behat --init
■test.featureシナリオを作成
※ファイル名は適当です。
$ vim features/test.feature
Feature: Drupal.org search
In order to find modules on Drupal.org
As a Drupal user
I need to be able to use Drupal.org search
Scenario: Searching for "behat"
Given I go to "https://drupal.org"
When I fill in "Search Drupal.org" with "behat"
And I press "Search"
Then I should see "Behat Drupal Extension"
■minkを利用するために「FeatureContext.php」を修正
useやextendsを変更
$ vim features/bootstrap/FeatureContext.php
<?php
use Behat\Behat\Context\ClosuredContextInterface,
Behat\Behat\Context\TranslatedContextInterface,
Behat\Behat\Context\BehatContext,
Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode,
Behat\Gherkin\Node\TableNode;
use Behat\MinkExtension\Context\MinkContext;
//
// Require 3rd-party libraries here:
//
// require_once 'PHPUnit/Autoload.php';
// require_once 'PHPUnit/Framework/Assert/Functions.php';
//
/**
* Features context.
*/
class FeatureContext extends MinkContext
{
/**
* Initializes context.
* Every scenario gets it's own context object.
*
* @param array $parameters context parameters (set them up through behat.yml)
*/
public function __construct(array $parameters)
{
// Initialize your context here
}
//
// Place your definition and hook methods here:
//
// /**
// * @Given /^I have done something with "([^"]*)"$/
// */
// public function iHaveDoneSomethingWith($argument)
// {
// doSomethingWith($argument);
// }
//
}
■behatを実行
$ ./vendor/bin/behat
Feature: Drupal.org search
In order to find modules on Drupal.org
As a Drupal user
I need to be able to use Drupal.org search
Scenario: Searching for "behat" # features/test.feature:6
Given I go to "https://drupal.org" # FeatureContext::visit()
When I fill in "Search Drupal.org" with "behat" # FeatureContext::fillField()
And I press "Search" # FeatureContext::pressButton()
Then I should see "Behat Drupal Extension" # FeatureContext::assertPageContainsText()
1 scenario (1 passed)
4 steps (4 passed)
0m2.492s
とりあえず動いた。
次回はSeleniumを追加してブラウザでの挙動を確認する。