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を追加してブラウザでの挙動を確認する。