LoginSignup
5
6

More than 5 years have passed since last update.

behat 3.0 でBDD:機能拡張

Last updated at Posted at 2014-10-09

本当はもっと早く記事にする予定だったが。。。

関連記事:

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

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

さて、以前の記事でwait設定をしたことがあるが、
その他にもbehat3単独では不足している機能がたくさんある。
待ち時間一つとっても、n秒待つだけではなく、
画面に現れるまで待つとか、
画面の表示、非表示を確認したいとか。
ピンポイントでスクリーンショットを撮りたいとか、
json, xmlの状態確認したいとか。

そのほかもろもろ拡張機能を加えたいが一つ一つをContextに追加していてはちょっと面倒だ。
そこで最初から必要なものをあらかじめ用意しているパッケージがある。

Behat Custom Helper

今回はそれを使うことにする。

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

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

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

Behat Custom Helperのインストール

composerでインストール

composerより追加し設定ファイルを書き換えればOK。

$ ./composer.phar require "sanpi/behatch-contexts *@dev" --prefer-dist 
$ vi ./behat.yml

設定ファイル変更

設定ファイルに記述を追加する
extensionとcontexts項目に記述を追加
contextsには必要なものだけ追加する形でも良い。

behat.yml
default:
  suites:
    default:
      paths:
        - %paths.base%/features
      contexts:
        - FeatureContext
        - Behat\MinkExtension\Context\MinkContext
        - behatch:browser: # ←ここ追加
        - behatch:debug:   # ←ここ追加
        - behatch:json:    # ←ここ追加
        - behatch:rest     # ←ここ追加
        - behatch:system:  # ←ここ追加
        - behatch:table    # ←ここ追加
        - behatch:xml      # ←ここ追加
  extensions:
    Behat\MinkExtension:
      base_url: http://en.wikipedia.org/
      sessions:
        default:
          selenium2:
            wd_host: http://127.0.0.1:4444/wd/hub
    Sanpi\Behatch\Extension: ~  # ←ここ追加

インストール確認

$ ./bin/behat -dl

デフォルトの状態より圧倒的にフィーチャ文脈が増えていることが確認できる。
contextにbehatch:browserを追加してしていると以下の記述が見つかると思う。

Then /^(?:|私が)"(?P[^"])"を見るまで(?P\d+)秒間?待つ$/u
Then /^(?:|私が)"(?P[^"]
)"を見るまで待つ$/u
Then /^(?:|私が)"(?P[^"])"要素(?:で|に)"(?P[^"])"を見るまで(?P\d+)秒間?待つ$/u
Then /^(?:|私が)(?P\d+)秒間?待つ$/u

これをフィーチャに追加すればwait機能が使えることになる。
ではサンプルにあったwikipedia検索に追加してみる。
(サンプルは英語記述なのでフィーチャ分も英語バージョンを使っている)

features/search.feature
Feature: Search
  In order to see a word definition
  As a website user
  I need to be able to search for a word

  Scenario: Searching for a page that does exist
    Given I am on "/wiki/Main_Page"
    Then I wait 10 seconds               # ← ここに追加
    When I fill in "search" with "Behavior Driven Development"
    And I press "searchButton"
    Then I should see "agile software development"

  Scenario: Searching for a page that does NOT exist
    Given I am on "/wiki/Main_Page"
    Then I wait 10 seconds               # ← ここに追加
    When I fill in "search" with "Glory Driven Development"
    And I press "searchButton"
    Then I should see "Search results"

これからはとりあえず組み込んでおいて、
使うか使わないかは後で決めるって方向でいいのではないかな。

------------------- ↑ 本題はここまで ↑ -------------------

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

------------------- ↓ 補足はここから ↓-------------------

実はbehat3のmink-extensionや今回のBehat Custom Helperの日本語の調整を少し手伝った。
プルリクエスト(変更内容を適用してくれ依頼のこと)を送信したのが3か月前。
一部テストに不具合があったので修正をすぐに入れたのだが、
何か月も放置状態だった。

いったん取り消して再度送ったら適用されたので、
どうやら修正分に気づいていなかったっぽい。
githubちゃんもうちょっとどうにかしてほしい。

5
6
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
5
6