为Jest测试设置`Date.prototype.toLocaleString`的语言环境

Leo*_*ang 5 javascript jestjs

我们在世界各地都有前端工程师,因此当我们运行时Date.prototype.toLocaleString,我们会得到不同的结果。有时,这些差异会在Jest测试中显示出来。如果其他国家/地区的某人进行Jest测试,则可能会由于导致测试失败toLocaleString。有什么方法可以强制Jest使用特定的语言环境?

作为创可贴的解决方案,我在失败的测试中添加了以下内容:

  const toLocaleString = Date.prototype.toLocaleString;
  // eslint-disable-next-line no-extend-native
  Date.prototype.toLocaleString = function(locale = 'en-US', ...args) {
    return toLocaleString.call(this, locale, ...args);
  };
Run Code Online (Sandbox Code Playgroud)

fab*_*omf 10

您应该下载完整的 icu 节点包:

npm i full-icu --save

并像这样运行你的测试:

NODE_ICU_DATA=node_modules/full-icu jest

因此,如果您运行 npm 脚本,您的 package.json 将如下所示:

"scripts": {
   "dev": "...",
   "test": "NODE_ICU_DATA=node_modules/full-icu jest",
 },
Run Code Online (Sandbox Code Playgroud)

如果使用 React 脚本:

"scripts": {
   "dev": "...",
   "test": "NODE_ICU_DATA=node_modules/full-icu react-scripts test",
 },
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Jest VSCode 扩展,则必须更改此配置:

`"jest.pathToJest": "npm run test --"`
Run Code Online (Sandbox Code Playgroud)

  • jest 运行的节点服务器不具备完整的国际化功能。因此它无法正确格式化字符串,因为它在节点中找不到执行此操作的区域设置。 (3认同)
  • 安装后,如何设置测试所需的区域设置? (3认同)