我有一个单元测试,正在尝试测试NumberFormatter
的输出。
我的代码的简化版本是:
public function testGetFormattedPrice()
{
$formatter = NumberFormatter::create(
"de_DE",
NumbererFormatter::CURRENCY
);
$this->assertEquals(
'16,66 €',
$formatter->formatCurrency(16.66, "EUR")
);
}
这会导致失败:
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'16,66 €'
+'16,66 €'
我假设这与欧元符号(可能是字符编码)或字符串中的某种隐藏字节有关,但不确定如何检查吗?
任何人都可以给我一些有关如何调试此问题的建议,或者可能是什么原因?
干杯
Mo
答案 0 :(得分:2)
所以我找到了一个答案,好像NumberFormatter
在其输出中添加了一个不间断的空格(对于货币而言是有意义的),此处提供了更多信息:https://www.php.net/manual/en/numberformatter.formatcurrency.php#118304
我能够基于此提出一个解决方案:https://stackoverflow.com/a/40724830/4161644
public function testGetFormattedPrice()
{
$formatter = NumberFormatter::create(
"de_DE",
NumbererFormatter::CURRENCY
);
$format = str_replace("\xc2\xa0", ' ', $formatter->formatCurrency(16.66, "EUR"));
$this->assertEquals('16,66 €', $format);
}