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

在TypeScript中测试i18next本地化时遇undefined错误求助

问题原因及解决方案

你的测试返回undefined主要有三个核心问题:

1. 测试调用未传参

getVal函数声明了val参数,但测试里调用getVal()时没有传入任何值,导致i18next.t的上下文参数{ val }为undefined。如果你的翻译模板依赖这个参数,就会无法生成预期内容。

2. 测试环境未初始化i18next

运行测试时,i18next没有被配置翻译资源和初始化,调用t方法找不到对应的翻译键值,直接返回undefined。

3. 翻译键与预期值不匹配

测试期望返回'two',但你的翻译资源里可能没有配置'value'对应的内容,或者模板格式错误。


修复后的测试代码示例(真实初始化i18next)

import i18next from 'i18next';
import { getVal } from './getVal';

// 在测试前初始化i18next
beforeAll(() => {
  i18next.init({
    lng: 'en',
    resources: {
      en: {
        translation: {
          // 根据实际翻译模板调整,这里示例直接输出val参数
          value: '{{val}}'
        }
      }
    }
  });
});

describe('get value', () => {
  it("return the value expected", () => {
    // 传入对应参数,让val匹配期望的'two'
    expect(getVal('two')).toBe('two');
  });
});

替代方案(模拟i18next,避免真实初始化)

如果不想在测试中真实初始化i18next,可以用jest模拟t方法:

import i18next from 'i18next';
import { getVal } from './getVal';

jest.mock('i18next', () => ({
  t: jest.fn((key, options) => options.val)
}));

describe('get value', () => {
  it("return the value expected", () => {
    expect(getVal('two')).toBe('two');
    // 验证t方法是否被正确调用
    expect(i18next.t).toHaveBeenCalledWith('value', { val: 'two' });
  });
});

额外说明

如果你的翻译模板不是直接输出val(比如value: '当前值为{{val}}'),需要同步修改测试的期望结果为对应的字符串(比如'当前值为two')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:35:23