PHPUnit - 断言两个字符串相等失败。

6

我有一个单元测试,我想测试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

1个回答

9

我找到了一个答案,似乎 NumberFormatter 在输出时添加了一个不间断空格(对于货币来说是有意义的),更多信息请参见:https://www.php.net/manual/en/numberformatter.formatcurrency.php#118304

基于此,我能够提出解决方案:https://dev59.com/IlkR5IYBdhLWcg3w3AwM#40724830

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);
}

非常感谢,我遇到了这个问题,你刚好解决了它。 - henritroyat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接