脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

PhpStormから日本語behat

Windows7 + PhpStorm-8.0.3 + behat-3.0.15

Behatを使い始めた。

多言語に対応していない

PhpStorm(8, 9, 10) は、Behatの多言語に対応していない。
英語以外のステップは補完できないし、IDEからテストの実行すらできない。

2014-05-15 に issue が上がっているが、
1年半経ってもアサインがなく、対応される気配がない。

テストを「あらゆる人が読める言語で記述する」というのが、
振る舞いテスト、とくに受け入れテストにおいて大きな意味を持つと理解している。
プログラマが読めればいいのであれば、 Selenium のテストケースでも別にいい。

私は英語を読めないし、それ以上に、ステークホルダは日本語を求めている。
よって、Gherkin は日本語で記述しなければならない。

世の中グローバル、グローバル言っているが、
プロジェクトのステークホルダがそうならない以上、日本語で書くしかない。

そこで、日本語でBehatを補完付き記述、実行できるIDEを探してみたものの見つからなかった。

外部ツールとして実行

外部ツール扱いにすることで、ひとまず実行することだけはできる。
幸いPhpStormはプロジェクトにPHPバイナリを結び付けられるので簡単。

File > Settings > Tools > External Tools に "behat" とでも名前をつけて新規作成。

Program: $PhpExecutable$
Parameters: $ProjectFileDir$\src\vendor\behat\behat\bin\behat --config=behat.yml --format=progress --colors tests/features/$FileName$
Working directory: $ProjectFileDir$\src\behaviorTest

もちろん補完はできないし、実行はファイル単位となってしまう。
多言語での補完と、クリックでシナリオ単位の実行ができるIDEが欲しい。

他のIDEの場合

プロジェクトにPHPバイナリを結び付けられないようなIDEの場合は、
PHP_BIN などの環境変数経由でPHPバイナリのパスを取得することになりそう。

cmd.exe ならたぶんこんな感じ

@echo off
rem ###
rem Behat Bridge for IDE (cmd.exe)
rem
rem Usage:
rem Select feature, and execute from IDE.
rem   Program: <this-file>
rem   Arguments: tests/features/$FileName$
rem   WorkingDir: <project>/src/behaviorTest
rem
rem Required env vars
rem   PHP_BIN php-binary
rem ###

set BASE_DIR = "%~dp0"
set BEHAT_BIN=%BASE_DIR%..\..\src\vendor\behat\behat\bin\behat

set TEST_ROOT = %~dp0../../src/behaviorTest

cd %TEST_ROOT%
%PHP_BIN% -v
echo on
call %PHP_BIN% %BEHAT_BIN% --config=behat.yml --format=progress %*

PowerShellならたぶんこんな感じ

###
# IDE用 Behat Bridge (PowerShell版)
#
# Usage:
# 以下のように指定して、IDEからフィーチャを選択して実行する
#   プログラム: powershell
#   引数: -NoProfile -ExecutionPolicy Unrestricted <このファイル> tests/features/$FileName$
#   WorkingDir: <project>/src/behaviorTest
#
# 必要な環境変数
#   PHP_BIN phpバイナリ
#

$PHP_BIN = $env:PHP_BIN
$BASE_DIR = Split-Path $MyInvocation.MyCommand.Path -Parent
$BEHAT_BIN = Convert-Path $BASE_DIR/../../src/vendor/behat/behat/bin/behat

$TEST_ROOT = Convert-Path "$BASE_DIR/../../src/behaviorTest"

cd $TEST_ROOT
& $PHP_BIN -v
& $PHP_BIN $BEHAT_BIN --config=behat.yml --format=progress --colors $args

$ret = $lastexitcode
exit $ret