Что не так с управляющими символами в инструменте командной строки 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.
Ответ 2
В качестве альтернативы просто используйте https://github.com/adoxa/ansicon/releases, чтобы получить цвета ansi в окнах.
Исходный код: https://github.com/adoxa/ansicon
Ответ 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, также пройдут.