Question

So I have PHPUnit running in PHPStorm 7.1, but I can't find out how to get the ANSI color codes working from within tests. My PHPunit.xml has colors = "true" in the property list, but every time I try something like:

echo "\033[31mError! Error!\033[0m\n";

Inside one of my test cases, it just gives me:

[31mError! Error![0m

in the PHPstorm phpunit output. Is there any way to make the colors appear properly when using ANSI color codes in tests in PHPStorm?

Was it helpful?

Solution 2

PhpStorm has special integration script to run PHPUnit tests (all messages/progress indicators are transferred into GUI part where you can easily see what tests have passed and what did not etc).

PhpStorm's console does not support ANSI colors -- http://youtrack.jetbrains.com/issue/IDEA-69880 and related tickets.

But you can install Grep Console plugin and it will add support for ANSI colors (needs to be activated in Settings). I have tried it with PHPUnit and it worked -- not everything was colored (some of the codes were not recognized, but most worked). You can contact plugin author with not working parts if desired.

OTHER TIPS

This question was asked 5 years back, but if anyone stops by, I have written a simple PHP class as part of my open source project. It utilizes the VT-100 ANSI escape sequencing and has been tested with PHPStorm 2019.3 while running PHPUnit 8.5 in the console.

You can copy the code below to include in your software, or you can also install via composer '1happyplace/phpunit-colors' There is a full description here.

The following example code will create the output below:

// echo out the escaped strings to create different levels of warnings
echo Display::warning("Warning!");
echo Display::caution("Caution...");
echo Display::OK("OK to go!");

// place the escaped string in the $message field to light up your output 
$this->assertSame("one","two",Display::caution("This assertion has intentionally failed"));

enter image description here

class Display
{
/**
 * The escape sequence that clears any active styling on the terminal.
 */
const CLEAR = "\e[0m";

/**
 * Warning escape sequence which sets the background color to red and the
 * foreground to white.
 */
const WARNING = "\e[41;97m";

/**
 * Caution escape sequence which sets the background color to yellow and the
 * foreground to black.
 */
const CAUTION = "\e[43;30m";

/**
 * OK escape sequence which sets the background color to green and the
 * foreground to black.
 */
const OK      = "\e[42;30m";

/**
 * Display the text with a red background and white foreground
 * and end it with the newline character (if desired)
 *
 * @param mixed $text - the text of the message
 * @param boolean $newline - whether to append a new line
 * 
 * @return string - the escaped sequence and the optional newline
 */
public static function warning($text, $newline = true) {

    // echo the string surrounded with the escape coding to
    // display a warning
    $text = self::WARNING . $text . self::CLEAR;

    // if a carriage return was desired, send it out
    $text .= $newline ? "\n" : "";

    // return the escaped text
    return $text;

}

/**
 * Display the text with a yellow background and black foreground
 * and end it with the newline character (if desired)
 *
 * @param mixed $text - the text of the message
 * @param boolean $newline - whether to append a new line
 * 
 * @return string - the escaped sequence and the optional newline
 */
public static function caution($text, $newline = true) {

    // echo the string surrounded with the escape coding to
    // display a cautionary message
    $text = self::CAUTION . $text . self::CLEAR;

    // if a carriage return was desired, send it out
    $text .= $newline ? "\n" : "";

    // return the escaped text
    return $text;
}

/**
 * Display the text with a green background and black foreground
 * and end it with the newline character (if desired)
 *
 * @param mixed $text - the text of the message
 * @param boolean $newline - whether to append a new line
 * 
 * @return string - the escaped sequence and the optional newline
 */
public static function OK($text, $newline = true) {

    // echo the string surrounded with the escape coding to
    // display a positive message
    $text = self::OK . $text . self::CLEAR;

    // if a carriage return was desired, send it out
    $text .= $newline ? "\n" : "";

    // return the escaped text
    return $text;
}

Create a phpunit.xml file in your project root with the following:

<phpunit
    colors="true">
</phpunit>
  • In PHPStorm select PhpStorm > Preferences.
  • Under PHP > Test Frameworks > Click + to add PHPUnit Local.
  • Click Path to phpunit.phar radio button.
  • Select the phpunit binary from the phpunit vendor directory.
  • Under Test Runner click the Default configuration file checkbox.
  • Select the phpunit.xml file you created earlier.
  • Hit Apply.

This has been tested working with PHPStorm 2021.2 and PHPUnit 9.5.8.

Edit Run/Debug configurations and add in "Test Runner options" field: --colors=always

works for local and docker/wsl environments.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top