Что не так с управляющими символами в инструменте командной строки PHPUnit?

Когда я запускаю phpunit из командной строки, контрольные символы распечатываются вместо того, чтобы действовать как управляющие символы. Взгляните на это:

PHPUnit 3.6.5 by Sebastian Bergmann.

Configuration read from app\phpunit.xml.dist

...

Time: 1 second, Memory: 12.00Mb

‹[30;42m‹[2KOK (3 tests, 3 assertions)
‹[0m‹[2K

Я предполагаю, что такие знаки, как ‹[30;42m<, являются своего рода управляющими символами и должны использоваться консолью по-разному (позиционирование курсора, удаление символов и т.д.)

Что здесь может быть неправильным?

Ответ 1

Это происходит потому, что вы настроили phpunit на использование цветов.

<phpunit colors="true"

но, к сожалению, невозможно создать цветной вывод на терминале Windows.

Существует открытая проблема to not show those chars on windows where they can't be translated into colors на phpunit issues tracker, и я работаю над патчем для этого.

Пока все, что вы можете сделать, это просто принять его или удалить color="true" из конфигурационного файла phpunit.xml.

Ответ 3

Недавно я столкнулся с этой проблемой при попытке запустить phpunit из командной строки в git bash на Windows 7. После проведения некоторых исследований возможных вариантов решения я решил поделиться решением, которое я выбрал для реализации я здесь.

Вы можете отфильтровать символы управления цветом ANSI от git bash. Создайте файл с именем phpunit (обратите внимание: фактический phpunit script не был на моем пути, и я в основном выполнял модульные тесты только от intellij) и помещал его в любом месте вашего $PATH (я предпочитаю ~/bin сам, но там нет правила):

#!/bin/sh
/path/to/phpunit "[email protected]" 2>&1 | perl -pe 's/(?<=\e\[)2;//g'

"[email protected]" сообщает bash взять остальные аргументы, переданные в script, и перенаправить их на phpunit. 2>&1 перенаправляет stderr на stdout, гарантируя, что любые управляющие символы, сгенерированные в выход ошибки ошибки также будет отфильтрован.

Наконец, весь вывод, созданный phpunit, передается через perl и проходит через регулярное выражение 's/(?<=\e\[)2;//g', которое удаляет управляющие символы.

Конечным результатом является то, что phpunit работает отлично, независимо от того, какой параметр <phpunit colors="" вы используете.

Надеюсь, это поможет!

Ответ 4

Thanx Danny, ваш ответ был очень полезным.

Для пользователей, которые хотят реализовать это несколько советов:

  • введите код из Danny в файл оболочки (например, ~/.phpunit.sh)
  • добавить псевдоним phpunit в ~/.bashrc(просто добавьте следующую строку). Если у вас еще нет .bashrc, просто создайте пустой файл.

    alias phpunit = "~/.phpunit.sh"

  • закройте bash и снова откройте его

  • теперь все должно работать, но проверяйте это, чтобы быть уверенным.

Ответ 5

Как и то, что они сказали, это сработало для меня.

Перейдите в .bashrc в каталоге ~/и добавьте

alias phpunitc="phpunit "[email protected]" 2>&1 | perl -pe 's/(?<=\e\[)2;//g'"

Затем я просто использую phpunitc в git bash. Все параметры, отправленные на phpunit, также пройдут.