LoginSignup
3
4

More than 5 years have passed since last update.

behat3とzombiejsでBDDに挑戦(2)

Last updated at Posted at 2014-06-09

なんでbehat"3"とバージョン番号を書いたのかというと。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

関連記事:

さて、使ったことないツールをインストールするとなると、
まず重要なのは”動くようにする”こと。
バージョンやら、構成やらは後で変えればよくて、
まず動くようにしてから次に進む。

behatは現在(2014/06/07)でstableのバージョンは3.0.8。
だが、マニュアルを読むと2.4を使う方法しか載ってない。
やってみるとわかるがバージョンを3にしたら、
後方互換が微妙で全部動かなくなるのだ。
バージョン3については次回書くとして、
まずはバージョン2をマニュアル通り動かすことを考えよう。

構成は以下の通り

モジュール バージョン
CentOS 6
PHP(CLI) 5.4
nodejs 0.10.28

ミドルウェアのインストール

PHPとnode.jsを使うのでそれをインストール。
リポジトリにepelを使うのでそれを登録するところからやっているが、
すでに登録済みならすっとばしてもらえばいい。

$ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
$ wget  http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 
$ sudo rpm -K epel-release-*.rpm
$ sudo yum install epel-release-6-8.noarch.rpm
$ sudo yum --enablerepo=epel install nodejs-cli npm
$ sudo yum install php-cli  php-mbstring php-xml

動作確認

$ node --version
$ npm --version
$ php -v

zombie.jsのインストール

先にヘッドレスブラウザのインストール。
nodejsのパッケージ管理ツールnpmを使ってインストール。
バージョンは最新の2.0系。

$ sudo npm -g install zombie@1.4.1

インストール先はデフォルトで

/usr/lib/node_modules/

となる

behat2のインストール

適当なディレクトリを作成し、
そこにbehatをインストールする。

$ mkdir behat2
$ cd behat2
composerのインストール

behatはPHPのパッケージ管理ツールcomposerを使ってインストールする。
初めて使う人にはわかりにくいツールだが、
PEARが荒廃した状態では使わざるを得ないだろう。
今回は表記しやすいようにコマンドライン形式で書いているが、
通常はcomposer.jsonを編集することが多い。

$ curl http://getcomposer.org/installer | php  # composer.pharの生成
$ ./composer.phar init -n                      # composer.jsonの生成
$ ./composer.phar config bin-dir "bin/"        # コマンドのインストール先指定
$ ./composer.phar install --prefer-source      # venderディレクトリ生成
$ ./composer.phar require "behat/behat 2.*@stable" "behat/mink 1.5.*@stable" "behat/mink-extension *@dev" "behat/mink-goutte-driver *@dev" "behat/mink-zombie-driver *@dev" # 各種インストール
インストール確認
$ ./bin/behat --version
Behat version 2.5.3
behat2の設定

behatのプロジェクトを初期化する。
featuresディレクトリが新規に作成され必要なファイルが生成される。

$ ./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

これでbehatのインストールは完了。
一回動かしてみよう。

$ ./bin/behat
シナリオがありません
ステップがありません
0m0.003s

なにやらメッセージが出ているがとりあえずおいておく。

extensionの設定

一応インストールはこれで終わりなのだが、
zombie.jsを使うにはextensionを登録する必要がある。

behat.yml作成

まずは設定ファイルbehat.ymlを作成する
テンプレートがmink-extendsのインストール先にあるので、それを使う

$ cp vendor/behat/mink-extension/behat.yml.dist ./behat.yml  
$ vi behat.yml 

設定は以下のように変更
base_urlは自身がテストしたいURLに変えてもらえばいいだろう

behat.yml
default:
  extensions:
    Behat\MinkExtension\Extension:
      base_url: http://qiita.com/
      default_session: zombie
      javascript_session: zombie
      zombie: 
        node_modules_path: '/usr/lib/node_modules/'

動作確認だけしておこう。(エラーメッセージが出なければ成功)

$ ./bin/behat
シナリオがありません
ステップがありません
0m0.003s
FeatureContext.phpの調整

次にFeatureContextを調整する。
変更するのは__constructメソッド。

$ vi features/bootstrap/FeatureContext.php
FeatureContext.php
    public function __construct(array $parameters)
    {
        $this->useContext('mink', new Behat\MinkExtension\Context\MinkContext);
    }

設定はこれで完了。
dlオプションでフィーチャファイル内で使える用語リストが取得できるのだが、
Extensionが設定できていないと取得できない。
これを利用して動作確認する。

$ ./bin/behat -dl --lang=ja
Given /^(?:|I )am on (?:|the )homepage$/
 When /^(?:|I )go to (?:|the )homepage$/
Given /^(?:|ユーザーは )"(?P<page>[^\s]+)" を表示している$/u
 When /^(?:|ユーザーが )"(?P<page>[^\s]+)" へ移動する$/u
・・・

また、下記のコマンドに表示される内容はフィーチャファイル作成時に必要になるので、
どこかにメモとして保管して置くといいだろう。

$ ./bin/behat -dl --lang=ja
$ ./bin/behat -di --lang=ja
$ ./bin/behat --story-syntax --lang=ja

あとはfeaturesディレクトリにテストコード(フィーチャ)を設置すればテストが始まる。

features/qiita.feature
# language: ja
フィーチャ: Qiitaトップへ移動
 httpにアクセスしたらリダイレクトしてhttpsになる

 シナリオ: Qiitaトップへ移動
  前提 ユーザーは "/" を表示している
  かつ print current URL
$ ./bin/behat
フィーチャ: Qiitaトップへ移動
  httpにアクセスしたらリダイレクトしてhttpsになる

  シナリオ: Qiitaトップへ移動      # features/qiita.feature:5
    前提 ユーザーは "/" を表示している # Behat\MinkExtension\Context\MinkContext::visit()

|  https://qiita.com/

    かつ print current URL # Behat\MinkExtension\Context\MinkContext::printCurrentUrl()

1 個のシナリオ (1 個成功)
2 個のステップ (2 個成功)
0m2.986s

さて、使うまでのハードルは高めだが、
これで一応動いているので、
featureやFeatureContext.phpをいじってテストを進めてもらって大丈夫。

次回はbehat3のインストールをやってみようと思う。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4