Как быстро написать отладочный вывод из тестового метода 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");
}
}