Javascript Intl.NumberFormat空格字符不匹配

Javascript Intl.NumberFormat空格字符不匹配,javascript,Javascript,我遇到了一个问题,Intl.NumberFormat以某种不同于Jest期望的方式格式化空格字符。对同一个函数进行测试,测试值不会产生空格,因为分隔符可以通过。Jest认为4个字符和5个字符之间的间距是不同的。我在我的应用程序和测试中都使用了适用于fr_CA的intlpolyfill 这是我的函数,但唯一真正相关的部分是Intl.NumberFormat输出。如何协调空格字符的格式以使测试通过 export function formatCurrency( num, locale = 'en

我遇到了一个问题,
Intl.NumberFormat
以某种不同于Jest期望的方式格式化空格字符。对同一个函数进行测试,测试值不会产生空格,因为分隔符可以通过。Jest认为4个字符和5个字符之间的间距是不同的。我在我的应用程序和测试中都使用了适用于fr_CA的
intl
polyfill

这是我的函数,但唯一真正相关的部分是
Intl.NumberFormat
输出。如何协调空格字符的格式以使测试通过

  export function formatCurrency( num, locale = 'en_US', showFractionDigits = false) {
    const options = {
        style: locale === 'fr_CA' ? 'decimal' : 'currency',
        currency: locale.length && locale.indexOf('CA') > -1 ? 'CAD' : 'USD'
    };

    const final = new Intl.NumberFormat(locale.replace('_', '-'), options).format(num);

    if (locale === 'fr_CA') {
        return `${final} $`;
    } else {
        return final;
    }
  }
我的主张:

expect(formatCurrency(24555.55, 'fr_CA', true)).toBe('24 555,55 $');
结果:

Expected value to be:
  "24 555,55 $"
Received:
  "24 555,55 $"
为空格字符(普通空格)生成“32”

new Intl.NumberFormat('fr-CA').format(11111.11).split('').map(x => console.log((x.charCodeAt(0))))
为空格字符生成“160”,这是一个不间断空格

要使这些测试通过,需要在断言中添加不间断空格UTF-16(\xa0)字符代码

expect(formatCurrency(24555.55, 'fr_CA', true)).toBe('24\xa0555,55 $');

NumberFormat在千位分隔符中使用小的不间断空间(
\u202f
),在货币之前使用普通的不间断空间(
\xa0

expect(新的Intl.NumberFormat(“fr”{
风格:“货币”,
货币:“欧元”,
}).format(126126)).toBe(“126\u202f126,00\xa0€”)

我看不出您的预期和收到的结果有什么不同。你有打字错误吗?没有。这就是这个问题的重点。哇,我花了太多时间绞尽脑汁试图解决这个问题。很高兴我比以前晚到这里。这是什么原因?有没有办法告诉
Intl
使用正常的
\x20
空格字符?@andersnylund这是理想的/正确的行为。美元和美分不应该出现在两条不同的线上。这只是你在测试之前不会考虑的事情。非常感谢你分享
\u202f
这个角色!
expect(formatCurrency(24555.55, 'fr_CA', true)).toBe('24\xa0555,55 $');