なんでbehat"3"とバージョン番号を書いたのかというと。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
関連記事:
- [behat3とzombiejsでBDDに挑戦(1)]
- behat3とzombiejsでBDDに挑戦(2)
- [behat 3.0 とzombiejsでBDDに挑戦(3)]
- [behat 3.0とphantomjsでBDDに挑戦(4)]
- [behat 3.0とJenkins CIでBDDに挑戦(5)]
[behat3とzombiejsでBDDに挑戦(1)]:http://qiita.com/dozo/items/be0ff9e9443413a32d25
[behat3とzombiejsでBDDに挑戦(2)]:http://qiita.com/dozo/items/4cb29ee55c4bd8891786
[behat 3.0 とzombiejsでBDDに挑戦(3)]:http://qiita.com/dozo/items/ec0448ffcbb703df9e43
[behat 3.0とphantomjsでBDDに挑戦(4)]:http://qiita.com/dozo/items/5a5f81061a5aade383d6
[behat 3.0とJenkins CIでBDDに挑戦(5)]:http://qiita.com/dozo/items/4de280e580bdc48c9d93
さて、使ったことないツールをインストールするとなると、
まず重要なのは”動くようにする”こと。
バージョンやら、構成やらは後で変えればよくて、
まず動くようにしてから次に進む。
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に変えてもらえばいいだろう
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
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ディレクトリにテストコード(フィーチャ)を設置すればテストが始まる。
# 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のインストールをやってみようと思う。