---
title: Drupal 8 へのスタンドアロン behat の導入
tags:  #behat #drupal  
author: [Tom Konda](https://convert.docswell.com/user/tom-konda)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/KYJ6P5KM7V.jpg?width=480
description: Drupal Meetup Tokyo Dec.2016 で発表した内容です。
published: December 22, 16
canonical: https://convert.docswell.com/s/tom-konda/5JQQVZ-drupal-8-behat
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/KYJ6P5KM7V.jpg)

al
rup 8 へのスタンドアロン
om onda
D
T
K
ehat の導入
B


# Page. 2

![Page Image](https://bcdn.docswell.com/page/5GJ5KYPQE4.jpg)

ehat とは
B
で動作する のテストフレームワーク
ordpress、 aravel、 oodle など各種 フレームワーク対応
もちろん rupal 向けも存在
PHP
BDD
W
L
D
M
PHP


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4LE3Z53ZE5.jpg)

al 向け ehat のスタンドアロンインストール
rup
D
B
al 向け ehat のインストール手順
i. ehat 用のディレクトリの作成
ii. omposer を利用して、必要パッケージの導入
iii. ehat の設定
基本的に rupal 向け ehat のインストールガイドに沿えば
https://behat‑drupal‑
extension.readthedocs.io/en/3.1/localinstall.html
rup
D
B
B
C
B
D
B
OK


# Page. 4

![Page Image](https://bcdn.docswell.com/page/V8EDRD44JG.jpg)

ehat 用のディレクトリの作成
B
適当なディレクトリに ehat のテストを行うディレクトリの作成
B
cd /path/to/behat/
mkdir behat-tests
cd behat-tests


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4V7PWXMVJ8.jpg)

omposer を利用して、必要パッケージの導入
C
omposer で必要なモジュールを導入
日本国内なら、いわゆる『光遅い問題』への対処がベター
必要なモジュールを記述するため、composer.json の作成
C
touch composer.json


# Page. 6

![Page Image](https://bcdn.docswell.com/page/L2JV8L9RJQ.jpg)

必要なモジュールの記述
ehat のインストールマニュアルのまま記述
B
{
&quot;require&quot;: {
&quot;drupal/drupal-extension&quot;: &quot;~3.0&quot;,
&quot;guzzlehttp/guzzle&quot; : &quot;^6.0@dev&quot;
},
&quot;config&quot;: {
&quot;bin-dir&quot;: &quot;bin/&quot;
}
}


# Page. 7

![Page Image](https://bcdn.docswell.com/page/Z5EG5XZ6EL.jpg)

必要なモジュールのインストール
omposer でパッケージのインストール
C
composer install


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V4JQZ8L2JP.jpg)

ehat の設定
B
ehat の設定を記述するため、behat.yml の作成
B
touch behat.yml


# Page. 9

![Page Image](https://bcdn.docswell.com/page/DK7432DPE1.jpg)

ehat の設定の記述
B
公式サイトのドキュメントを参考に
al サーバのアドレス設定
rup
D
default:
suites:
default:
contexts:
- FeatureContext
- Drupal\DrupalExtension\Context\DrupalContext
- Drupal\DrupalExtension\Context\MinkContext
- Drupal\DrupalExtension\Context\MessageContext
- Drupal\DrupalExtension\Context\DrushContext
extensions:
Behat\MinkExtension:
goutte: ~
selenium2: ~
base_url: http://drupal-server-addr.example.com/
Drupal\DrupalExtension:
blackbox: ~


# Page. 10

![Page Image](https://bcdn.docswell.com/page/PLJ11MZXJG.jpg)

ehat の設定の初期化
B
以下のコマンドで ehat の初期化の実行
B
./bin/behat --init


# Page. 11

![Page Image](https://bcdn.docswell.com/page/8GJW839K72.jpg)

ehat のインストール成否の確認
B
ehat 用ディレクトリの下に FeatureContext.php があれば成功
成功していれば定義済みの命令一覧が以下のコマンドで表示
B
./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
（
）
省略


# Page. 12

![Page Image](https://bcdn.docswell.com/page/W4EZ8V9NJ3.jpg)

ehat 定義済みの命令一覧について
B
で英語表示がオススメ
Given や When、 Then が日本語化されると分かりづらい
英語以外だと他の ehat のテストスクリプトが読みづらい
--lang en
B


# Page. 13

![Page Image](https://bcdn.docswell.com/page/KY76P5K9EV.jpg)

ehat のテストスクリプトの流れ
B
名
# Feature
Feature: Feature Name
# Scenario
Scenario: Scenario Name
#
Given hogehoge
When foobar
Then xyzzy
名
シナリオの中身
1. iven で前提条件の記述
G
例： iven am an anonymous user
2. hen でこれから行う動作の記述
例： go to &quot;admin/content&quot;
3. hen で期待される結果の記述
例： hen the response status code should be 403
G
W
I
T
T
I


# Page. 14

![Page Image](https://bcdn.docswell.com/page/5G75KYPDJ4.jpg)

ehat テストスクリプトの作成
B
テストスクリプトの作成場所
‑ /path/to/behat/behat-tests/features に作成
拡張子は *.feature
今回は、 test.feature というファイルで作成
touch features/test.feature


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V9J2WGZMER.jpg)

作成するテストシナリオ
このシナリオに合致する、定義済み命令を一覧から探す
eature 名
テストフィーチャー
シナリオ名
未ログインで存在しないページを表示
前提条件
ユーザはログインしていない
行う動作
foobar にアクセス
期待する結果
ステータスコードが 404 になる
F
HTTP


# Page. 16

![Page Image](https://bcdn.docswell.com/page/5DEYLVRPJM.jpg)

作成するファイル
名
テストフィ チャ
名
未ログインで存在しないペ ジを表示
シナリオの中身
# Feature
Feature:
ー
ー
# Scenario
Scenario:
ー
#
Given I am not logged in
When I go to &quot;foobar&quot;
Then the response status code should be 404


# Page. 17

![Page Image](https://bcdn.docswell.com/page/2VJN4MDME8.jpg)

テストスクリプトの実行
テストを実行する時は、下記のコマンド実行
テストスクリプトがすべて実行
./bin/behat
Feature:
テストフィーチャー
Scenario: 管理者でユーザ一覧を表示
# features/test
Given I am not logged in
# Drupal\Drupal
When I go to &quot;foobar&quot;
# Drupal\Drupal
Then the response status code should be 404 # Drupal\Drupal
個のシナリオ
個のステップ
個成功)
個成功)
1
(1
3
(3
0m1.09s (12.85Mb)


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GYE9QNGWE3.jpg)

定義されていない命令を書いてしまった場合
エラーメッセージで定義の追加の仕方が表示
拡張を行う場合はこれを参考に追加するとベター
./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();
}


# Page. 19

![Page Image](https://bcdn.docswell.com/page/5GE8GKVRED.jpg)

まとめ
al 向けの ehat のスタンドアロンでの導入方法を示した
簡単なテストスクリプトの作成方法を示した
rupal での
テストの第一歩を踏み出せるようになった
rup
D
D
B
BDD


