Behat でメソッド定義して正規表現にもマッチしているはずなのに「未定義」と言われてハマった件
原因が分かったときに死ぬほど悲しかったが、ひとまず記録しておく。
... When I run "git daily init" ...
とか書いてて、メソッドも
<?php // ... /* * @When /^I run "git daily(?: ([^"]*))?"$/ * * @param string $args */ public function iRunGitDaily($args = '') // {{{ { // ... }
と定義してあって、これで間違いなく正規表現にマッチしているはずなのに、
未定義のステップを、次のスニペットで実装できます: /** * @When /^I run "([^"]*)"$/ */ public function iRun($argument1) { throw new PendingException(); }
などと言われ、やたらハマってたんだけど、落ちついてドキュメントをもう一度読んでいたら、
Notice the comment block starts with /**, and not the usual /*. This is important for Behat to be able to parse such comments as annotations!
Defining Reusable Actions - Step Definitions — Behat 2 documentation
。。。oh ... なるほど ...
メソッドの定義を
<?php // ... // ↓ここが ** じゃなくて * になってた /** * @When /^I run "git daily(?: ([^"]*))?"$/ * * @param string $args */ public function iRunGitDaily($args = '') // {{{ { // ... }
これで解決。
初歩的?
- (追記) ソースまで追っかけてないけどこの仕様は多分 PHP の ReflectionMethod の getDocComment() メソッドの仕様によるものとおもわれる