Как быстро написать отладочный вывод из тестового метода PHP Spec - PullRequest
0 голосов
/ 05 февраля 2019

Я унаследовал некоторые тесты 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?

Ответы [ 4 ]

0 голосов
/ 27 июля 2019

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

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

formatter.name: pretty

, либо при выполнении тестабегун с флагом формата

vendor/bin/phpspec run --format=pretty

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

0 голосов
/ 05 февраля 2019

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

0 голосов
/ 14 февраля 2019

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

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

для этого вы можете выбросить

FailureException

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

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

<?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");
    }


}
0 голосов
/ 05 февраля 2019

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

...