使用 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();
}
}