提问人:chris 提问时间:8/22/2023 最后编辑:chris 更新时间:9/15/2023 访问量:74
使用 Jest 运行测试时,如何让 Intl.NumberFormat 识别纳秒?
When running tests with Jest, how do I get Intl.NumberFormat to recognize nanosecond?
问:
我有一些使用 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
项目表示,这应该不再是必要的; 应该已经有数据了。node
full-icu
我尝试安装,但仍然出现错误。full-icu
我更新到了最新版本的 jest (29+) 和 jest-environment-jsdom (29+),以防万一。我仍然收到错误。
答:
1赞
chris
8/23/2023
#1
回答我自己的问题:
和同事一起调试,我们发现罪魁祸首是节点的版本。
我们的项目正在使用 .在此版本中,测试未通过。在(最高版本 18)时,测试未通过。在(最高版本 19)时,测试未通过。在 ,测试确实通过!node 18.4.2
node 18.17.1
node 19.8.1
node 20.0.0
我们假设节点 20 包括 使用的纳秒数据。我们假设这与浏览器中已经提供的数据相同,这就是代码在浏览器中工作的原因。Intl.NumberFormat
评论
unit: 'decimals'
unit: 'nanosecond'
style: 'decimal'