LoginSignup
7
8

More than 5 years have passed since last update.

behat 3.0 とzombiejsでBDDに挑戦(3)

Last updated at Posted at 2014-06-15

さて、お遊びはここまでだ。

関連記事:

------------------- ↓ 余談はここから ↓-------------------

behat3について

前回の記事ではbehat2をインストールした。
全体的な流れはだいたい理解いただけたと思う。
しかし、本題はこれからバージョン3をインストールするにあたって、
前回の記事の内容は全部忘れてもらっていいだろう。

工工エエェェェェェェェ(゚Д゚)ェェェェェエエエ工工

全部は言いすぎか。
完成系があんな感じねっていうのが掴めれば問題ない。

さて、なぜ私がバージョン3に拘るかというと、
そのアップデート内容にある。

  • スイートという概念を導入
  • フィーチャ、コンテクストの組み合わせ自由度上昇
  • テスト失敗時に状態を出力
  • Turnipフォーマットに対応
  • WebAPIのテストも可

Gherkin書式の正規表現からTurnip書式のプレースホルダになったり、
エラー時の状態把握がしやすかったり、
フィーチャの組み合わせを自由にしたり、
コンテクストの肥大化が避けられたりと。
割と魅力的な変更が行われている。

しかし、アーキテクチャもガラッと変わり、
フィーチャファイル以外は作り直す方がいいだろう。
以下は前回と異なるディレクトリでやっているつもりで見てほしい。

$ mkdir behat3
$ cd behat3

------------------- ↑ 余談はここまで ↑-------------------

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

------------------- ↓ 本題はここから ↓-------------------

behat 3.0zombie.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 
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ディレクトリにテストコード(フィーチャ)を設置すればテストが始まる。
前回と同じものを置いてみよう。

features/qiita.feature
# 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を使ってみることにする。

7
8
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
7
8