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

313 Views

December 22, 16

スライド概要

Drupal Meetup Tokyo Dec.2016 で発表した内容です。

profile-image

Web developer, OpenStreetMap mapper. This Account tweets only Tech or OSM, sometimes something like geography except for reply or fav.

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

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

2.

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

3.

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

4.

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

5.

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

6.
[beta]
必要なモジュールの記述

ehat のインストールマニュアルのまま記述

B

{

"require": {
"drupal/drupal-extension": "~3.0",
"guzzlehttp/guzzle" : "^6.0@dev"
},
"config": {
"bin-dir": "bin/"
}
}

7.

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

8.

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

9.

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: ~

10.

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

11.

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 ( ) 省略

12.

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

13.

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 "admin/content" 3. hen で期待される結果の記述 例: hen the response status code should be 403 G W I T T I

14.

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

15.

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

16.

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

17.

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

18.
[beta]
定義されていない命令を書いてしまった場合

エラーメッセージで定義の追加の仕方が表示
拡張を行う場合はこれを参考に追加するとベター

./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();
}

19.

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