Javascript Intl.NumberFormat在Jest单元测试中行为不正确?

Javascript Intl.NumberFormat在Jest单元测试中行为不正确?,javascript,localization,internationalization,jestjs,number-formatting,Javascript,Localization,Internationalization,Jestjs,Number Formatting,网站上说: var number = 123456.789; console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }) .format(number)); // expected output: "123.456,79 €" 但在我的Jest单元测试中,我得到的是作为输出的€123456.79,根据我和Mozilla的例子,这对于fr语言环境是不正确的 我尝试加载多边形填充和区域设置

网站上说:

var number = 123456.789;

console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' })
.format(number));

// expected output: "123.456,79 €"
但在我的Jest单元测试中,我得到的是作为输出的
€123456.79
,根据我和Mozilla的例子,这对于
fr
语言环境是不正确的

我尝试加载多边形填充和区域设置数据,但似乎无法解决问题

import 'intl';
import 'intl/locale-data/complete';
import 'intl/locale-data/jsonp/fr';
import 'intl/locale-data/jsonp/fr-FR';
import 'intl/dist/Intl.complete';

知道哪里可能出错了吗?

看起来节点和浏览器行为不一致。我认为polyfills可能不起作用,因为您的节点支持
Intl
。还有一个避免重写本机实现的检查。尝试使用
IntlPolyfill
,它应该是可用的。
我还尝试了节点6.14.4,得到了123456.79欧元的回答

我认为这是因为我们必须向节点提供locale/ICU数据。之后加载polyfill不会修补节点中已存在的Intl api

没有进一步测试,但以下链接可能会有所帮助:


对我有效的解决方案是:

  • npm i完整icu
  • 使用
    NODE\u ICU\u DATA=NODE\u modules/full ICU jest运行测试

  • 对于任何感兴趣的人,节点>=13默认启用了完整的icu支持:

    你好。使用IntlPolyfill不是已经是我想要做的了吗?是的,不是,它是同一个包。这是包装出口的另一个全球性问题。它总是导出IntlPolyfill,如果没有定义Intl,我将为Intl创建一个别名。我与EUR有完全相同的问题!你找到解决办法了吗?@AralRoca我在这里发布了自己的答案:但没有尝试