如何使用phpspec获取代码自动完成功能

faz*_*azy 14 php phpspec phpstorm

我刚刚开始学习phpspec以取代PHPUnit.不幸的是,我更喜欢使用PHPStorm编辑器的代码完成功能,这使得即使是PHPUnit的详细模拟界面也可以非常快速地输入.

phpspec没有这样的运气.鉴于这样的类:

<?php

namespace spec\MyVendor\MyClass;

use PhpSpec\ObjectBehavior;

class MyClassSpec extends ObjectBehavior
{
    function it_is_initializable()
    {
        $this->shouldHaveType('MyVendor\MyClass');
    }

    function it_should_do_something()
    {
        $this->???
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,shouldHaveType显示'找不到方法'突出显示,其次,如果我尝试自动完成???,我的选项仅限于少数方法ObjectBehaviour.我希望看到的东西一样shouldHaveType,shouldImplement和许多.

我在Github上找到了这个phpspec-stubs存储库,但它似乎只定义了一个方法,并且需要扩展一个包装类.

还有一个PHPStorm插件,但我不清楚这是否应该提供自动完成,并且当前版本在输入任何PHP文件时立即在PHPStorm中给我一个NullPointerException.

那么,你们所有的phpspec用户都打字很多,还是有另一种解决方案?

Jak*_*las 20

更新:自2016年以来, PhpStorm内置了对PhpSpec的支持.我们只能期望每个新版本都会改​​进它.

来自问题的PhpSpec的PhpStorm插件并没有真正维护,但您可以尝试其他解决方案.从PhpStorm 7开始,可以使用@mixin注释:

<?php

namespace spec\MyVendor;

use MyVendor\MyClass;
use PhpSpec\ObjectBehavior;

/**
 * @mixin MyClass
 */
class MyClassSpec extends ObjectBehavior
{
    function it_is_initializable()
    {
        $this->shouldHaveType('MyVendor\MyClass');
    }

    function it_should_do_something()
    {
        $this->doSomething(':D');
    }
}
Run Code Online (Sandbox Code Playgroud)

资料来源:

要获得PHPStorm中正确的PhpSpec支持,请在此处投票:https://youtrack.jetbrains.com/issue/WI-22670

  • 很好的解决方法.预言还有一种解决方法吗?就像`$ this-> doSomething(':D') - > willReturn('something');`? (4认同)