Как получить автоматическое завершение кода с помощью phpspec

Я только начал изучать 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->???
    }
}

Во-первых, shouldHaveType показывает выделение "метод не найден", а во-вторых, если я попытаюсь автозаполнять точку ???, мои параметры ограничены несколькими методами в ObjectBehaviour. Мне бы хотелось увидеть такие вещи, как shouldHaveType, shouldImplement и многие другие.

Я нашел этот phpspec-stubs в Github, но, похоже, только один метод определен и требует расширения класса-оболочки.

Там также есть плагин PHPStorm, но мне это не понятно, если это должно обеспечить автозаполнение, а текущая версия дает мне исключение NullPointerException в PHPStorm немедленно при входе в любой файл PHP.

Итак, все, что вы, пользователи phpspec, печатаете много, или есть другое решение?

Ответы

Ответ 1

Обновление. PhpStorm имеет встроенную поддержку PhpSpec с 2016.3. Мы можем только ожидать, что он будет улучшен с каждым новым выпуском.

Плагин PhpStorm для PhpSpec из вопроса не поддерживается, но вы можете попробовать другое решение. Начиная с 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');
    }
}

Источники:

Для правильной поддержки PhpSpec в PHPStorm ваш голос здесь: https://youtrack.jetbrains.com/issue/WI-22670