Intl.NumberFormat 在 Jest 单元测试中表现不正确?

Seb*_*ber 12 javascript localization internationalization number-formatting jestjs

Mozilla的网站说:

var number = 123456.789;

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

// expected output: "123.456,79 €"
Run Code Online (Sandbox Code Playgroud)

但是在我的 Jest 单元测试中,根据我和 Mozilla 的示例,我得到的输出€ 123,456.79对于fr-FR语言环境不正确。

我尝试加载 polyfills 和区域设置数据,但似乎没有解决问题

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';
Run Code Online (Sandbox Code Playgroud)

知道有什么问题吗?

Ale*_*ych 8

对我有用的解决方案是:

  1. npm i full-icu
  2. 运行你的测试 NODE_ICU_DATA=node_modules/full-icu jest


Seb*_*ber 5

回答我自己的问题。

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

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

开玩笑:测试 Intl.DateTimeFormat https://github.com/nodejs/node/blob/master/doc/api/intl.md


Her*_*kov 1

看起来节点和浏览器行为之间不一致。我认为 polyfills 可能不起作用,因为你的节点支持Intl. 并且有一个检查以避免覆盖本机实现。尝试使用IntlPolyfill,它应该可用。\n我还尝试了节点 6.14.4,并得到了\xe2\x82\xac123,456.79:D

\n