测试等于命令输出时,assertEqual 不起作用

assertEqual not works when testing equals of command output

这是我在命令中输出的内容:

$output->writeln("3[37;42m Translations from " . $input->getArgument('bundle') . " imported successfully! 3[0m");

这是我在命令行中使用 trim 函数删除空格得到的结果:

trim($commandTester->getDisplay())
..string(69) " Translations from AcmeDemoBundle imported successfully! "

但是当我 运行 这个:

$this->assertEquals(" Translations from AcmeDemoBundle imported successfully! ", trim($commandTester->getDisplay()));

我得到:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-' Translations from AcmeDemoBundle imported successfully! '
+Binary String: ... 

我做错了什么?

这是预期的行为,因为输出中的字符串是:

"3[37;42m Translations from AcmeDemoBundle imported successfully! 3[0m"

在字符串的开头和结尾有特殊字符,但它们不是trim函数删除的特殊字符,所以,你的真正比较是在上面的字符串和:

 " Translations from AcmeDemoBundle imported successfully! "

哪些是不同的字符串,虽然在输出中看不到特殊字符。

您可以在指定 trim 函数的第二个属性的字符串中添加要删除的字符。您可以在此处查看规范:

http://php.net/manual/es/function.trim.php