Как быстро написать отладочный вывод из тестового метода PHP Spec

Я унаследовал некоторые тесты phpspec.

Тест проверяет значение метода с именем "getFatalErrors" и сообщает об ошибке с помощью:

 expected [array:1], but got [array:1].

Я хотел бы видеть фактическое содержимое массива.

Я попытался взломать тестовый класс phpspec, добавив такие строки:

<?php

namespace spec;

use MyClass;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class MyClassSpec extends ObjectBehavior
{



    public function it_returns_a_path_problem($args,\XMLFileWrapperTest $testWrapper)
    {
        echo "foo";

        ...

        var_dump(print_r($this->getFatalErrors()->getWrappedObject(), true));
        ...
        fwrite(STDOUT, "foo");
        print_r($this->getFatalErrors()->getWrappedObject(), true)



        $this->display("foo");
    }
}

-

Но я никогда не смогу получить какой-либо вывод для отображения в моем выводе CLI.

Как сделать так, чтобы в моем тестовом выводе появился какой-то произвольный текст, чтобы я "видел", что происходит, когда я стал лучше знаком с PHPSpec?

3 ответа

Попробуйте другой форматтер.

Когда форматтер pretty выбирается либо в phpspec.yml с помощью строки

formatter.name: pretty

или при выполнении тестовой программы с флагом формата

vendor/bin/phpspec run --format=pretty

тогда echo вывод виден в терминале.

Просто запустите phpspec с -v флаг, это будет более многословным.

Вы пытались привязать журнал ошибок и добавить в свою функцию что-то вродеerror_log( print_r( $this->getFatalErrors()->getWrappedObject(), 1 ) ); или же error_log( print_r( $this->getFatalErrors(), 1 ) );? Обычно это работает, поскольку выходные данные записываются в журнал ошибок вашего сервера, и вы можете использовать терминал или консоль, чтобы отследить этот файл и увидеть в режиме реального времени результат.

Согласно документации phpspec для Matchers> Inline Matcher, это возможно...

напечатать более подробное сообщение об ошибке

для этого можно бросить

FailureException

Итак, это означает, что можно бросить FailureException для вывода пользовательских сообщений из ваших методов примера PHPSpec.

Я попробовал это, и это позволило мне написать фразу "сообщение foo" в мой тестовый вывод:

<?php

namespace spec;


use PhpSpec\ObjectBehavior;
[...]
use PhpSpec\Exception\Example\FailureException;

class MyClassSpec extends ObjectBehavior
{


    public function it_tests_something()
    {

        [...]

        throw new FailureException("foo message");
    }


}
Другие вопросы по тегам