肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

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() メソッドの仕様によるものとおもわれる