You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue单元测试中让vue-i18n加载.json格式的翻译文件

解决方案

该问题本质是jest环境下json默认导入行为和生产环境不一致,导入的json内容被包裹在default属性下,导致vue-i18n无法读取到正确的翻译key。可按以下步骤调整配置解决:

步骤1:校验ts-jest配置(优先尝试)

如果你的项目使用ts-jest处理TypeScript文件,可在jest配置文件(jest.config.js、vue.config.js的jest字段或package.json的jest字段)中添加以下配置,确保jest侧的json导入行为和tsconfig配置对齐:

module.exports = {
  // 其他原有配置
  globals: {
    'ts-jest': {
      tsconfig: {
        // 和tsconfig.json配置保持一致
        resolveJsonModule: true,
        esModuleInterop: true
      }
    }
  },
  // 确保json在模块扩展名列表里
  moduleFileExtensions: [
    "js",
    "json",
    "jsx",
    "ts",
    "tsx",
    "vue"
    // 其他原有扩展名
  ]
}

步骤2:排查moduleNameMapper冲突

检查jest配置中的moduleNameMapper字段,是否存在把json文件匹配到静态资源mock的规则,例如:

// 错误示例:会把所有json文件导入为mock的静态资源对象
moduleNameMapper: {
  '\\.(css|less|json)$': '<rootDir>/test/mocks/fileMock.js'
}

如果有这类规则,把json从匹配规则中移除即可。

步骤3:配置json专用transform(备选方案)

如果上述配置无效,可安装jest-transform-stub专门处理json文件导入:

  1. 安装依赖:
npm install jest-transform-stub --save-dev
  1. 修改jest配置的transform字段:
module.exports = {
  // 其他原有配置
  transform: {
    '^.+\\.json$': 'jest-transform-stub',
    // 保留原有其他transform规则,比如vue、ts、js的处理规则
    '^.+\\.vue$': 'vue-jest',
    '^.+\\.tsx?$': 'ts-jest'
  }
}

调整完成后重新运行单元测试,即可正常加载json格式的翻译文件。

内容的提问来源于stack exchange,提问作者sceee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:39:00