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

Post on 16-Apr-2017

103 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 テストの第一歩を踏み出せるようになった

top related