在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
相关产品推荐
相关产品推荐

