さて、お遊びはここまでだ。
関連記事:
- [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
------------------- ↓ 余談はここから ↓-------------------
behat3について
前回の記事ではbehat2をインストールした。
全体的な流れはだいたい理解いただけたと思う。
しかし、本題はこれからバージョン3をインストールするにあたって、
前回の記事の内容は全部忘れてもらっていいだろう。
工工エエェェェェェェェ(゚Д゚)ェェェェェエエエ工工
全部は言いすぎか。
完成系があんな感じねっていうのが掴めれば問題ない。
さて、なぜ私がバージョン3に拘るかというと、
そのアップデート内容にある。
- スイートという概念を導入
- フィーチャ、コンテクストの組み合わせ自由度上昇
- テスト失敗時に状態を出力
- Turnipフォーマットに対応
- WebAPIのテストも可
Gherkin書式の正規表現からTurnip書式のプレースホルダになったり、
エラー時の状態把握がしやすかったり、
フィーチャの組み合わせを自由にしたり、
コンテクストの肥大化が避けられたりと。
割と魅力的な変更が行われている。
しかし、アーキテクチャもガラッと変わり、
フィーチャファイル以外は作り直す方がいいだろう。
以下は前回と異なるディレクトリでやっているつもりで見てほしい。
$ mkdir behat3
$ cd behat3
------------------- ↑ 余談はここまで ↑-------------------
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
behat 3.0とzombie.jsのインストール
zombie.jsのインストール(バージョンアップ)
behat 3.0付属のmink-extensionはzombiejs2が必要なので先にバージョンアップをしておく。
$ sudo npm -g install zombie@2.x
behat3のインストール
behat3にバージョンアップするので、
それに付随する各種モジュールもバージョンを上げる必要がある。
以下の組み合わせで動作確認はできているので試してほしい。
composerのインストール
$ curl http://getcomposer.org/installer | php # composerのダウンロード
$ ./composer.phar init -n # composer.jsonの生成
$ ./composer.phar config bin-dir "bin/" # binディレクトリ指定
$ ./composer.phar install # venderディレクトリ生成
$ ./composer.phar require "behat/behat 3.*@stable" "behat/mink 1.6.*@dev" "behat/mink-extension 2.*@dev" "behat/mink-browserkit-driver *@dev" "behat/mink-goutte-driver *@dev" "behat/mink-zombie-driver *@dev" --prefer-dist # 各種インストール
インストール確認
$ ./bin/behat --version
behat version 3.0.8
behat3の設定
behatのプロジェクトを初期化する。
featuresディレクトリが新規に作成され必要なファイルが生成される。
$ ./bin/behat --init
+d features - place your *.feature files here
+d features/bootstrap - place your context classes here
+f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here
extensionの設定
behat2と同様zombie.jsを使うにはextensionを登録する必要がある。
behat.yml作成
まずは設定ファイルbehat.ymlを作成する
テンプレートがmink-extendsのインストール先にあるので、それを使う
$ cp vendor/behat/mink-extension/behat.yml.dist ./behat.yml
$ vi behat.yml
default:
suites:
default:
paths: # ←↓ここ修正
- %paths.base%/features
contexts: # ←↓ここ修正
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
extensions:
Behat\MinkExtension:
base_url: http://qiita.com/
sessions:
default:
zombie: # ←↓ここ修正
node_modules_path: '/usr/lib/node_modules/'
動作確認だけしておこう。(エラーメッセージが出なければ成功)
$ ./bin/behat
No scenarios
No steps
0m0.05s (15.05Mb)
設定はこれで完了。
dlオプションでフィーチャファイル内で使える用語リストが取得できるのだが、
Extensionが設定できていないと取得できない。
これを利用して動作確認する。
$ ./bin/behat -dl --lang=ja
default | Given /^(?:|I )am on (?:|the )homepage$/
default | When /^(?:|I )go to (?:|the )homepage$/
default | Given /^(?:|ユーザーは )"(?P<page>[^\s]+)" を表示している$/u
default | When /^(?:|ユーザーが )"(?P<page>[^\s]+)" へ移動する$/u
・・・
また、下記のコマンドに表示される内容はフィーチャファイル作成時に必要になるので、
どこかにメモとして保管して置くといいだろう。
$ ./bin/behat --story-syntax --lang=ja # フィーチャ書式構文
$ ./bin/behat -dl --lang=ja # 書式一覧
$ ./bin/behat -di --lang=ja # 書式一覧+詳細説明
$ ./bin/behat --config-reference # behat.yml設定パラメータ
あとはfeaturesディレクトリにテストコード(フィーチャ)を設置すればテストが始まる。
前回と同じものを置いてみよう。
# language: ja
フィーチャ: Qiitaトップへ移動
httpにアクセスしたらリダイレクトしてhttpsになる
シナリオ: Qiitaトップへ移動
前提 ユーザーは "/" を表示している
ならば 最後のレスポンスを表示
$ ./bin/behat
フィーチャ: Qiitaトップへ移動
httpにアクセスしたらリダイレクトしてhttpsになる
シナリオ: Qiitaトップへ移動 # features/qiita.feature:5
前提 ユーザーは "/" を表示している # Behat\MinkExtension\Context\MinkContext::visit()
かつ print current URL # Behat\MinkExtension\Context\MinkContext::printCurrentUrl()
│ https://qiita.com/
1 scenario (1 passed)
2 steps (2 passed)
0m3.80s (15Mb)
余裕がある人は以下を見てもらうといいだろう。
参考:
https://www.youtube.com/watch?v=xOgyKTmgYI8
http://www.slideshare.net/everzet/behat-30-meetup-march
behat3についてはいいのだが、zombie.jsについては不満が出てきた。
なので、次回はphantomjsを使ってみることにする。