【问题标题】:Jest.js test doesn't work with Intl.NumberFormatJest.js 测试不适用于 Intl.NumberFormat
【发布时间】:2017-07-14 08:49:39
【问题描述】:

我有一个 Jest 测试来检查包含货币的输入字段的值。该数字使用 global.Intl.NumberFormat 进行格式化,如下所示:

const formatter = new global.Intl.NumberFormat(locale, config);

其中 locale 设置为 nl-NL 且 config 为

{ style: 'decimal',
  currency: 'EUR',
  minimumFractionDigits: 2,
  maximumFractionDigits: 2 }

当我在测试中模拟输入时,我得到了数字的美国格式,即使在我的浏览器中它工作得很好。 例如,如果我这样做

input.simulate('change', { target: { value: '5000' } });

我会得到“5,000.00”格式,而对于欧元,我应该得到“5.000,00”。 它进行格式化,但不适用于正确的语言环境。 我想知道 Jest 是否在为我嘲笑某些东西,如果是这样,我该如何关闭它?任何线索将不胜感激。

【问题讨论】:

  • 如果您在测试设置中使用 Karma 或 PhantomJS,您可能需要使用 npmjs.com/package/karma-intl-shim 之类的东西来修补 Intl 支持?
  • 我正在使用酶,所以如果我使用 react-intl 进行全球化,我可以使用酶反应国际。我会考虑这样做。谢谢指点!

标签: reactjs unit-testing jestjs


【解决方案1】:

您需要安装https://www.npmjs.com/package/full-icu 以包括节点或测试环境中的所有语言环境。在浏览器中包含所有语言环境,但在 Node 中默认仅加载英语。

更多信息:https://nodejs.org/api/intl.html

安装包后,调整您的 package.json 脚本: "test": "NODE_ICU_DATA=node_modules/full-icu jest"

您可能还需要使用 node --icu-data-dir=node_modules/full-icu file 更改节点执行的脚本,否则 NumberFormat 在客户端和服务器上的行为可能会有所不同。

【讨论】:

  • 这对我有用!另外,安装full-icu时添加--save-dev
猜你喜欢
  • 2019-06-29
  • 1970-01-01
  • 2018-06-09
  • 2020-06-19
  • 1970-01-01
  • 2022-11-24
  • 2020-09-20
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多