我刚刚开始学习phpspec,以期取代PHPUnit。不幸的是,我相当迷上了使用 PHPStorm 编辑器的代码完成功能,这使得即使是 PHPUnit 冗长的模拟界面也非常快速地键入。
phpspec没有这样的运气。给定这样的类:
<?php
namespace specMyVendorMyClass;
use PhpSpecObjectBehavior;
class MyClassSpec extends ObjectBehavior
{
function it_is_initializable()
{
$this->shouldHaveType('MyVendorMyClass');
}
function it_should_do_something()
{
$this->???
}
}
首先,shouldHaveType
显示"找不到方法"突出显示,其次,如果我尝试在???
点自动完成,我的选择仅限于ObjectBehaviour
中的几种方法。我想看到像shouldHaveType
、shouldImplement
等等的东西。
我在 Github 上找到了这个 phpspec-stubs 存储库,但它似乎只定义了一种方法,并且需要扩展包装类。
还有一个 PHPStorm 插件,但我不清楚这是否应该提供自动完成功能,当前版本在输入任何 PHP 文件后立即在 PHPStorm 中为我提供了一个 NullPointerException。
那么,你们所有的phpspec用户都打了很多字,还是有其他解决方案?
更新:自 2016.3 以来,PhpStorm 内置了对 PhpSpec 的支持。我们只能期望它在每个新版本中都会得到改进。
问题中的PhpSpec的PhpStorm插件并没有真正维护,但你可以尝试另一种解决方案。从 PhpStorm 7 开始,可以使用 @mixin
注释:
<?php
namespace specMyVendor;
use MyVendorMyClass;
use PhpSpecObjectBehavior;
/**
* @mixin MyClass
*/
class MyClassSpec extends ObjectBehavior
{
function it_is_initializable()
{
$this->shouldHaveType('MyVendorMyClass');
}
function it_should_do_something()
{
$this->doSomething(':D');
}
}
来源:
- http://blog.jetbrains.com/phpstorm/2013/11/phpstorm-7-1-eap-133-51/
- http://youtrack.jetbrains.com/issue/WI-1730#
对于PHPStorm中正确的PhpSpec支持,请在此处投票: https://youtrack.jetbrains.com/issue/WI-22670