使用 Behat 子上下文类,我需要从主上下文调用一个方法,例如$this->getMainContext()->fooBar() 。 PhpStorm 非常合理地警告我 fooBar() 不存在,因为它期望 getMainContext() 返回一个 ExtendedContextInterface ,而不是我的具体 FeatureContext

有没有办法注释我的子类来告诉 PhpStorm getMainContext() 实际上返回我的具体类?

一种解决方案是覆盖 getMainContext() 只是为了有一个方法来添加我自己的 PHPDoc,从而指定不同的返回类型,但是添加一个方法只是为了在 IDE 中获得更好的代码意义是可怕的。

顺便说一句,我知道这有点老套,理论上我的子上下文不应该依赖于具有特定具体实现的主要上下文;实际上,尽管 Behat 并没有做到这一点。

最佳答案

对类使用标准的@method 批注:

 /**
  * @method FeatureContext getMainContext()
  */
 class SubContext extends BehatContext
 {
     public function foo()
     {
          $this->getMainContext()->bar();
     }
 }

10-08 07:59