Upload
tomkonda
View
103
Download
4
Embed Size (px)
Citation preview
Drupal 8 へのスタンドアロン Behat の導入Tom Konda
Behat とは
PHP で動作する BDD のテストフレームワーク
Wordpress、Laravel、Moodle など各種 PHP フレームワーク対応
もちろん Drupal 向けも存在
Drupal 向け Behat のスタンドアロンインストール
Drupal 向け Behat のインストール手順
i. Behat 用のディレクトリの作成ii. Composer を利用して、必要パッケージの導入
iii. Behat の設定
基本的に Drupal 向け Behat のインストールガイドに沿えば OKhttps://behat‑drupal‑extension.readthedocs.io/en/3.1/localinstall.html
Behat 用のディレクトリの作成
適当なディレクトリに Behat のテストを行うディレクトリの作成
cd /path/to/behat/mkdir behat-testscd 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 - 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: ~
Behat の設定の初期化
以下のコマンドで Behat の初期化の実行
./bin/behat --init
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(省略)
Behat 定義済みの命令一覧について
--lang en で英語表示がオススメ Given や When 、 Then が日本語化されると分かりづらい
英語以外だと他の 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
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/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)
定義されていない命令を書いてしまった場合
エラーメッセージで定義の追加の仕方が表示
拡張を行う場合はこれを参考に追加するとベター
./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(); }
まとめ
Drupal 向けの Behat のスタンドアロンでの導入方法を示した
簡単なテストスクリプトの作成方法を示した
Drupal での BDD テストの第一歩を踏み出せるようになった