使用 Jest 运行测试时,如何让 Intl.NumberFormat 识别纳秒?

When running tests with Jest, how do I get Intl.NumberFormat to recognize nanosecond?

提问人:chris 提问时间:8/22/2023 最后编辑:chris 更新时间:9/15/2023 访问量:74

问:

我有一些使用 Intl.NumberFormat 来格式化数字的 JavaScript 代码。具体来说,我将它与以下选项一起使用:

  const formatterOptions: Intl.NumberFormatOptions = {
    style: 'unit',
    unit: 'nanosecond',
  };

当我在浏览器中运行此代码时,格式设置有效。这是有道理的,因为 Intl.NumberFormat 文档指出它可以支持纳秒。

当我使用 Jest 运行单元测试时,出现以下错误:

RangeError: Invalid unit argument for Intl.NumberFormat() 'nanosecond'

--

似乎在 Jest 环境中运行的代码不知道“纳秒”。

我发现了一个之前的问题,表明安装可能会修复 Jest 单元测试。full-icu

然而,完整的ICU项目表示,这应该不再是必要的; 应该已经有数据了。nodefull-icu

我尝试安装,但仍然出现错误。full-icu

我更新到了最新版本的 jest (29+) 和 jest-environment-jsdom (29+),以防万一。我仍然收到错误。

JavaScript 数字格式

评论

0赞 rnewed_user 8/22/2023
你有没有试过,而不是我的意思是你可以不时把钱开到小数点unit: 'decimals'unit: 'nanosecond'
0赞 chris 8/22/2023
@rnewed_user我曾经格式化一个值,但在这种情况下,输出不会像“X 纳秒”那样。相反,它将是没有单位的“X”之类的东西。style: 'decimal'

答:

1赞 chris 8/23/2023 #1

回答我自己的问题:

和同事一起调试,我们发现罪魁祸首是节点的版本

我们的项目正在使用 .在此版本中,测试未通过。在(最高版本 18)时,测试未通过。在(最高版本 19)时,测试未通过。在 ,测试确实通过!node 18.4.2node 18.17.1node 19.8.1node 20.0.0

我们假设节点 20 包括 使用的纳秒数据。我们假设这与浏览器中已经提供的数据相同,这就是代码在浏览器中工作的原因。Intl.NumberFormat