2011-12-30 13 views
11

Cuando ejecuto phpunit desde una línea de comandos, los caracteres de control se están imprimiendo en lugar de actuar como caracteres de control. Tome vistazo a esto:¿Qué hay de malo con los caracteres de control en la herramienta de línea de comandos de 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 

Asumo que los signos como ‹[30;42m< son algún tipo de caracteres de control y deben ser utilizados por la consola en forma diferente (posicionar el cursor, borrar caracteres etc.)

¿Qué puede ser mal aquí?

+1

Referencia cruzada: [¿Cómo ver la salida de color Ant en MSYS/Git Bash?] (Http://stackoverflow.com/questions/8129363/how-to-see-color-ant-output-in-msys-git -bash) – hakre

+1

Superusuario: [PHPUnit cuadro de comandos de Windows colores agradables] (http://superuser.com/q/208150/63279) – hakre

Respuesta

10

Esto sucede porque ha configurado phpunit para usar colores.

<phpunit colors="true" 

pero lamentablemente no es posible crear una salida de color en un terminal de Windows.

Hay un tema abierto to not show those chars on windows where they can't be translated into colorsen el seguimiento de los problemas PHPUnit y estoy trabajando en un parche para eso.

Por ahora, todo lo que puede hacer es aceptarlo o eliminar el color="true" de su archivo de configuración phpunit.xml.

+0

¿Por qué debería generar un aviso cuando se solicitó explícitamente los códigos de color ANSI? – hakre

+0

@hakre Para decirle que no es compatible con Windows y para que sepa que debe deshabilitarlo en su configuración. Después de todo, ese es el problema al que se enfrenta OP y no necesitaría preguntar si había un aviso. – Gordon

+0

Bueno, si es su configuración, entonces debe haberlo habilitado, ¿no? Probablemente, el instalador pera debería ocuparse de los valores predeterminados dependientes de la plataforma, pero eso sería un problema de empaquetado, no un problema dentro de PHPUnit. – hakre

11

Como alternativa, simplemente use https://github.com/adoxa/ansicon/releases para obtener colores ansi en windows. código

Fuente: https://github.com/adoxa/ansicon

+0

Mucho mejor que las opciones que encontré. Es bueno saber que existe :) – edorian

+0

está abajo, ¿puedes volver a subirlo? – Michelle

+0

La URL actualizada es http://adoxa.altervista.org/ansicon/, que se puede encontrar desde el enlace github. Use ansicon -i para instalar permenantly para el usuario actual (o -I para equipo local). También permite colores para Git Bash en Windows. – Reuben

4

Hace poco encontré con este mismo problema al tratar de ejecutar PHPUnit desde la línea de comandos en bash Git en Windows 7. Después de realizar una investigación sobre los posibles varias soluciones que decidí compartir la solución Elegí implementar por mí mismo, aquí.

Puede filtrar los caracteres de control de color ANSI de git bash. Crear un archivo llamado phpunit (nota: la secuencia de comandos phpunit real no estaba en mi camino y yo estaba principalmente ejecutando pruebas unitarias de intellij solamente) y ponerlo en cualquier lugar en su $PATH (prefiero ~/bin pero no hay ninguna regla al respecto):

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

el "[email protected]" le indica a Bash a tomar el resto de los argumentos que se pasan a la secuencia de comandos y las remitirá al PHPUnit. 2>&1redirects stderr to stdout, asegurando que los caracteres de control generados en la producción de salida de error también serán filtrados.

Finalmente, toda la salida producida por phpunit se canaliza a través de perl y se ejecuta a través de la expresión regular 's/(?<=\e\[)2;//g', que elimina los caracteres de control.

El resultado final es que phpunit funciona perfectamente, independientemente de la configuración <phpunit colors="" que esté utilizando.

Espero que esto ayude!

0

Gracias Danny, tu respuesta fue muy útil.

Para los usuarios que desean poner en práctica esta algunos consejos:

  1. poner el código de Danny en un archivo de comandos (por ejemplo ~/.phpunit.sh)
  2. añade un alias a phpunit en ~/.bashrc (solo agrega la siguiente línea). Si todavía no tiene un .bashrc, simplemente cree un archivo vacío.

    alias PHPUnit = "~/.phpunit.sh"

  3. cerrar su golpe y abrirlo de nuevo

  4. deben funcionar las cosas ahora, pero probarlo para estar seguro.
0

Al igual que lo que dijeron, esto funcionó para mí.

Ir a .bashrc en su directorio ~/y añadir

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

Entonces sólo tiene que utilizar phpunitc en bash git. Todos los parámetros que envíe a phpunit también pasarán.

Cuestiones relacionadas