Drupal8 へのスタンドアロンBehat の導入
TomKonda
Behat とは
PHP で動作するBDD のテストフレームワーク
Wordpress、Laravel、Moodleなど各種PHP フレームワーク対応
もちろんDrupal向けも存在
Drupal向けBehat のスタンドアロンインストール
Drupal向けBehat のインストール手順
i. Behat 用のディレクトリの作成
ii. Composer を利用して、必要パッケージの導入
iii. Behat の設定
基本的にDrupal向けBehat のインストールガイドに沿えばOK
https://behat‑drupal‑
extension.readthedocs.io/en/3.1/localinstall.html
Behat 用のディレクトリの作成
適当なディレクトリにBehat のテストを行うディレクトリの作成
cd /path/to/behat/
mkdir behat-tests
cd behat-tests
Composer を利用して、必要パッケージの導入
Composer で必要なモジュールを導入
日本国内なら、いわゆる『光遅い問題』への対処がベター
必要なモジュールを記述するため、composer.jsonの作成
touch composer.json
必要なモジュールの記述
Behat のインストールマニュアルのまま記述
{
"require": {
"drupal/drupal-extension": "~3.0",
"guzzlehttp/guzzle" : "^6.0@dev"
},
"config": {
"bin-dir": "bin/"
}
}
必要なモジュールのインストール
Composer でパッケージのインストール
composer install
Behat の設定
Behat の設定を記述するため、behat.ymlの作成
touch behat.yml
Behat の設定の記述
公式サイトのドキュメントを参考にDrupalサーバのアドレス設定
default:
suites:
default:
contexts:
- FeatureContext
- DrupalDrupalExtensionContextDrupalContext
- DrupalDrupalExtensionContextMinkContext
- DrupalDrupalExtensionContextMessageContext
- DrupalDrupalExtensionContextDrushContext
extensions:
BehatMinkExtension:
goutte: ~
selenium2: ~
base_url: http://drupal-server-addr.example.com/
DrupalDrupalExtension:
blackbox: ~
Behat の設定の初期化
以下のコマンドでBehat の初期化の実行
./bin/behat --init
Behat のインストール成否の確認
Behat 用ディレクトリの下に FeatureContext.php があれば成功
成功していれば定義済みの命令一覧が以下のコマンドで表示
./bin/behat -dl --lang en
default | Given I am an anonymous user
default | Given I am not logged in
default | Given I am logged in as a user with the :role role(s)
default | Given I am logged in as a/an :role
default | Given I am logged in as a user with the :role role(s)
default | Given I am logged in as :name
(省略)
Behat 定義済みの命令一覧について
 --lang en で英語表示がオススメ
 Given や When 、 Then が日本語化されると分かりづらい
英語以外だと他のBehat のテストスクリプトが読みづらい
Behat のテストスクリプトの流れ
# Feature 名
Feature: Feature Name
# Scenario 名
Scenario: Scenario Name
# シナリオの中身
Given hogehoge
When foobar
Then xyzzy
1. Givenで前提条件の記述
例: GivenI amananonymous user
2. Whenでこれから行う動作の記述
例: I goto"admin/content"
3. Thenで期待される結果の記述
例: Thentheresponsestatus codeshouldbe403
Behat テストスクリプトの作成
テストスクリプトの作成場所
‑ /path/to/behat/behat-tests/features に作成
拡張子は *.feature 
今回は、 test.feature というファイルで作成
touch features/test.feature
作成するテストシナリオ
このシナリオに合致する、定義済み命令を一覧から探す
Feature 名
テストフィーチャー
シナリオ名
未ログインで存在しないページを表示
前提条件
ユーザはログインしていない
行う動作
foobar にアクセス
期待する結果
HTTP ステータスコードが404 になる
作成するファイル
# Feature 名
Feature: テストフィーチャー
# Scenario 名
Scenario: 未ログインで存在しないページを表示
# シナリオの中身
Given I am not logged in
When I go to "foobar"
Then the response status code should be 404
テストスクリプトの実行
テストを実行する時は、下記のコマンド実行
テストスクリプトがすべて実行
./bin/behat
Feature: テストフィーチャー
Scenario: 管理者でユーザ一覧を表示 # features/test
Given I am not logged in # DrupalDrupal
When I go to "foobar" # DrupalDrupal
Then the response status code should be 404 # DrupalDrupal
1 個のシナリオ (1 個成功)
3 個のステップ (3 個成功)
0m1.09s (12.85Mb)
定義されていない命令を書いてしまった場合
エラーメッセージで定義の追加の仕方が表示
拡張を行う場合はこれを参考に追加するとベター
./bin/behat
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
(中略)
1 個のシナリオ (1 個未定義)
3 個のステップ (2 個成功, 1 個未定義)
0m0.69s (12.76Mb)
--- FeatureContext のステップが見つかりません。 次のスニペットで定義でき
/**
* @Then Then the response status code should be :arg1
*/
public function thenTheResponseStatusCodeShouldBe($arg1
{
throw new PendingException();
}
まとめ
Drupal向けのBehat のスタンドアロンでの導入方法を示した
簡単なテストスクリプトの作成方法を示した
DrupalでのBDD テストの第一歩を踏み出せるようになった

Drupal 8 へのスタンドアロン behat の導入