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

19

Upload: tomkonda

Post on 16-Apr-2017

99 views

Category:

Software


4 download

TRANSCRIPT

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

Drupal 8 へのスタンドアロン Behat の導入Tom Konda

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

Behat とは

PHP で動作する BDD のテストフレームワーク

Wordpress、Laravel、Moodle など各種 PHP フレームワーク対応

もちろん Drupal 向けも存在

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

Drupal 向け Behat のスタンドアロンインストール

Drupal 向け Behat のインストール手順

i. Behat 用のディレクトリの作成ii. Composer を利用して、必要パッケージの導入

iii. Behat の設定

基本的に Drupal 向け Behat のインストールガイドに沿えば OKhttps://behat‑drupal‑extension.readthedocs.io/en/3.1/localinstall.html

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

Behat 用のディレクトリの作成

適当なディレクトリに Behat のテストを行うディレクトリの作成

cd /path/to/behat/mkdir behat-testscd behat-tests

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

Composer を利用して、必要パッケージの導入

Composer で必要なモジュールを導入

日本国内なら、いわゆる『光遅い問題』への対処がベター

必要なモジュールを記述するため、composer.json の作成

touch composer.json

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

必要なモジュールの記述

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

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

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

必要なモジュールのインストール

Composer でパッケージのインストール

composer install

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

Behat の設定

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

touch behat.yml

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

Behat の設定の記述

公式サイトのドキュメントを参考にDrupal サーバのアドレス設定

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: Drupal 8 へのスタンドアロン behat の導入

Behat の設定の初期化

以下のコマンドで Behat の初期化の実行

./bin/behat --init

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

Behat のインストール成否の確認

Behat 用ディレクトリの下に  FeatureContext.php  があれば成功

成功していれば定義済みの命令一覧が以下のコマンドで表示

./bin/behat -dl --lang endefault | Given I am an anonymous userdefault | Given I am not logged indefault | Given I am logged in as a user with the :role role(s)default | Given I am logged in as a/an :roledefault | Given I am logged in as a user with the :role role(s) and I have the following fields:default | Given I am logged in as :name(省略)

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

Behat 定義済みの命令一覧について

 --lang en  で英語表示がオススメ Given  や  When 、 Then  が日本語化されると分かりづらい

英語以外だと他の Behat のテストスクリプトが読みづらい

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

Behat のテストスクリプトの流れ

# Feature 名Feature: Feature Name # Scenario 名 Scenario: Scenario Name # シナリオの中身 Given hogehoge When foobar Then xyzzy

1. Given で前提条件の記述

例: Given I am an anonymous user

2. When でこれから行う動作の記述

例: I go to "admin/content"

3. Then で期待される結果の記述

例: Then the response status code should be 403

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

Behat テストスクリプトの作成

テストスクリプトの作成場所

‑ /path/to/behat/behat-tests/features  に作成拡張子は  *.feature 

今回は、 test.feature  というファイルで作成

touch features/test.feature

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

作成するテストシナリオ

このシナリオに合致する、定義済み命令を一覧から探す

Feature 名テストフィーチャー

シナリオ名

未ログインで存在しないページを表示

前提条件

ユーザはログインしていない

行う動作

foobar にアクセス

期待する結果

HTTP ステータスコードが 404 になる

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

作成するファイル

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

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

テストスクリプトの実行

テストを実行する時は、下記のコマンド実行

テストスクリプトがすべて実行

./bin/behatFeature: テストフィーチャー

Scenario: 管理者でユーザ一覧を表示 # features/test.feature:4 Given I am not logged in # Drupal\DrupalExtension\Context\DrupalContext::assertAnonymousUser() When I go to "foobar" # Drupal\DrupalExtension\Context\MinkContext::visit() Then the response status code should be 404 # Drupal\DrupalExtension\Context\MinkContext::assertResponseStatus()

1 個のシナリオ (1 個成功)3 個のステップ (3 個成功)0m1.09s (12.85Mb)

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

定義されていない命令を書いてしまった場合

エラーメッセージで定義の追加の仕方が表示

拡張を行う場合はこれを参考に追加するとベター

./bin/behatFeature: テストフィーチャー

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: Drupal 8 へのスタンドアロン behat の導入

まとめ

Drupal 向けの Behat のスタンドアロンでの導入方法を示した

簡単なテストスクリプトの作成方法を示した

Drupal での BDD テストの第一歩を踏み出せるようになった