Drupal 8 へのスタンドアロン behat の導入
Transcript of Drupal 8 へのスタンドアロン behat の導入
![Page 1: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/1.jpg)
Drupal 8 へのスタンドアロン Behat の導入Tom Konda
![Page 2: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/2.jpg)
Behat とは
PHP で動作する BDD のテストフレームワーク
Wordpress、Laravel、Moodle など各種 PHP フレームワーク対応
もちろん Drupal 向けも存在
![Page 3: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/3.jpg)
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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/4.jpg)
Behat 用のディレクトリの作成
適当なディレクトリに Behat のテストを行うディレクトリの作成
cd /path/to/behat/mkdir behat-testscd behat-tests
![Page 5: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/5.jpg)
Composer を利用して、必要パッケージの導入
Composer で必要なモジュールを導入
日本国内なら、いわゆる『光遅い問題』への対処がベター
必要なモジュールを記述するため、composer.json の作成
touch composer.json
![Page 6: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/6.jpg)
必要なモジュールの記述
Behat のインストールマニュアルのまま記述
{ "require": { "drupal/drupal-extension": "~3.0", "guzzlehttp/guzzle" : "̂6.0@dev"}, "config": { "bin-dir": "bin/" }}
![Page 7: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/7.jpg)
必要なモジュールのインストール
Composer でパッケージのインストール
composer install
![Page 8: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/8.jpg)
Behat の設定
Behat の設定を記述するため、behat.yml の作成
touch behat.yml
![Page 9: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/9.jpg)
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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/10.jpg)
Behat の設定の初期化
以下のコマンドで Behat の初期化の実行
./bin/behat --init
![Page 11: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/11.jpg)
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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/12.jpg)
Behat 定義済みの命令一覧について
--lang en で英語表示がオススメ Given や When 、 Then が日本語化されると分かりづらい
英語以外だと他の Behat のテストスクリプトが読みづらい
![Page 13: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/13.jpg)
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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/14.jpg)
Behat テストスクリプトの作成
テストスクリプトの作成場所
‑ /path/to/behat/behat-tests/features に作成拡張子は *.feature
今回は、 test.feature というファイルで作成
touch features/test.feature
![Page 15: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/15.jpg)
作成するテストシナリオ
このシナリオに合致する、定義済み命令を一覧から探す
Feature 名テストフィーチャー
シナリオ名
未ログインで存在しないページを表示
前提条件
ユーザはログインしていない
行う動作
foobar にアクセス
期待する結果
HTTP ステータスコードが 404 になる
![Page 16: Drupal 8 へのスタンドアロン behat の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/16.jpg)
作成するファイル
# 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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/17.jpg)
テストスクリプトの実行
テストを実行する時は、下記のコマンド実行
テストスクリプトがすべて実行
./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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/18.jpg)
定義されていない命令を書いてしまった場合
エラーメッセージで定義の追加の仕方が表示
拡張を行う場合はこれを参考に追加するとベター
./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 の導入](https://reader033.fdocuments.net/reader033/viewer/2022050914/58734d6e1a28ab56378b591d/html5/thumbnails/19.jpg)
まとめ
Drupal 向けの Behat のスタンドアロンでの導入方法を示した
簡単なテストスクリプトの作成方法を示した
Drupal での BDD テストの第一歩を踏み出せるようになった