338 Views
December 22, 16
スライド概要
Drupal Meetup Tokyo Dec.2016 で発表した内容です。
Web developer, OpenStreetMap mapper. This Account tweets only Tech or OSM, sometimes something like geography except for reply or fav.
al rup 8 へのスタンドアロン om onda D T K ehat の導入 B
ehat とは B で動作する のテストフレームワーク ordpress、 aravel、 oodle など各種 フレームワーク対応 もちろん rupal 向けも存在 PHP BDD W L D M PHP
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
ehat 用のディレクトリの作成 B 適当なディレクトリに ehat のテストを行うディレクトリの作成 B cd /path/to/behat/ mkdir behat-tests cd behat-tests
omposer を利用して、必要パッケージの導入 C omposer で必要なモジュールを導入 日本国内なら、いわゆる『光遅い問題』への対処がベター 必要なモジュールを記述するため、composer.json の作成 C touch composer.json
必要なモジュールの記述
ehat のインストールマニュアルのまま記述
B
{
"require": {
"drupal/drupal-extension": "~3.0",
"guzzlehttp/guzzle" : "^6.0@dev"
},
"config": {
"bin-dir": "bin/"
}
}
必要なモジュールのインストール omposer でパッケージのインストール C composer install
ehat の設定 B ehat の設定を記述するため、behat.yml の作成 B touch behat.yml
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: ~
ehat の設定の初期化 B 以下のコマンドで ehat の初期化の実行 B ./bin/behat --init
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 ( ) 省略
ehat 定義済みの命令一覧について B で英語表示がオススメ Given や When、 Then が日本語化されると分かりづらい 英語以外だと他の ehat のテストスクリプトが読みづらい --lang en B
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
ehat テストスクリプトの作成 B テストスクリプトの作成場所 ‑ /path/to/behat/behat-tests/features に作成 拡張子は *.feature 今回は、 test.feature というファイルで作成 touch features/test.feature
作成するテストシナリオ このシナリオに合致する、定義済み命令を一覧から探す eature 名 テストフィーチャー シナリオ名 未ログインで存在しないページを表示 前提条件 ユーザはログインしていない 行う動作 foobar にアクセス 期待する結果 ステータスコードが 404 になる F HTTP
作成するファイル 名 テストフィ チャ 名 未ログインで存在しないペ ジを表示 シナリオの中身 # Feature Feature: ー ー # Scenario Scenario: ー # Given I am not logged in When I go to "foobar" Then the response status code should be 404
テストスクリプトの実行 テストを実行する時は、下記のコマンド実行 テストスクリプトがすべて実行 ./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)
定義されていない命令を書いてしまった場合
エラーメッセージで定義の追加の仕方が表示
拡張を行う場合はこれを参考に追加するとベター
./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();
}
まとめ al 向けの ehat のスタンドアロンでの導入方法を示した 簡単なテストスクリプトの作成方法を示した rupal での テストの第一歩を踏み出せるようになった rup D D B BDD