PHPUnit命令行工具中的控制字符有什么问题?

时间:2011-12-30 09:04:52

标签: php command-line windows-xp 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<这样的符号是某种控制字符,应该以不同的方式由控制台使用(定位光标,删除字符等)。

这里有什么不妥?

5 个答案:

答案 0 :(得分:11)

这是因为您已将phpunit配置为使用颜色。

<phpunit colors="true"

但遗憾的是,无法在Windows终端上创建彩色输出。

phpunit问题跟踪器上有未解决的问题 to not show those chars on windows where they can't be translated into colors ,我正在为此修补补丁。

现在你要做的就是以太接受它或从你的phpunit.xml配置文件中删除color="true"

答案 1 :(得分:11)

或者,只需使用https://github.com/adoxa/ansicon/releases在Windows上获取ansi颜色。

源代码:https://github.com/adoxa/ansicon

答案 2 :(得分:4)

我最近遇到了同样的问题,试图在Windows 7的git bash中从命令行运行phpunit。在对可能的各种解决方案进行一些研究之后,我决定分享我选择为自己实现的解决方案,这里。

您可以从git bash中过滤出ANSI颜色控制字符。创建一个名为phpunit的文件(注意:实际的phpunit脚本不在我的路径中,我主要是从intellij运行单元测试)并将它放在$PATH的任何位置(我更喜欢{{1}我自己,但没有规则):

~/bin

"$@"告诉bash接受传递给脚本的其余参数并将它们转发给phpunit。 2>&1 redirects stderr to stdout,确保在生成错误输出时生成的任何控制字符也将被过滤掉。

最后,phpunit生成的所有输出都是通过perl传输并运行正则表达式's/(?<=\e\[)2;//g',它将删除控制字符。

最终结果是phpunit运行得很好,无论你使用的是什么#!/bin/sh /path/to/phpunit "$@" 2>&1 | perl -pe 's/(?<=\e\[)2;//g' 设置。

希望这有帮助!

答案 3 :(得分:0)

Thanx Danny,你的回答非常有帮助。

对于想要实现此功能的用户:

  1. 将Danny的代码放入shell文件中(例如〜/ .phpunit.sh)
  2. 在〜/ .bashrc中为phpunit添加一个别名(只需添加以下行)。如果你还没有.bashrc,只需创建一个空文件。

    alias phpunit =“〜/ .phpunit.sh”

  3. 关闭你的bash并再次打开

  4. 现在应该有所作为,但要确认一下。

答案 4 :(得分:0)

就像他们说的那样,这对我有用。

转到〜/目录中的.bashrc并添加

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

然后我在git bash中使用phpunitc。您发送给phpunit的所有参数也将通过。