Jest检测Trans组件报错ReferenceError: renderNodes未定义如何解决?
问题原因
你本地__mocks__/react-i18next.js文件中对Trans组件的模拟实现存在错误:代码中直接调用了未定义的renderNodes方法,该方法是真实react-i18next库的内部方法,你在编写mock时没有声明定义,因此Jest运行测试加载模拟文件时会抛出引用错误。
浏览器运行时加载的是真实的react-i18next库而非mock文件,因此功能正常不受影响。
修复方案
根据你的测试需求选择以下任意一种方案即可:
- 极简适配(适用于不需要对Trans渲染结果做复杂断言的场景)
直接修改__mocks__/react-i18next.js中第13行的Trans模拟逻辑,替换为以下代码:
Trans: ({ children, i18nKey }) => <>{children || i18nKey}</>,
该实现会直接返回Trans组件包裹的子元素,若没有子元素则返回传入的i18nKey,可覆盖绝大多数基础测试场景。
- 贴近真实行为的实现(适用于需要测试插值、嵌套标签解析逻辑的场景)
修改__mocks__/react-i18next.js的Trans模拟逻辑,手动实现简单的节点解析能力:
import { renderToString } from 'react-dom/server'; // mock内Trans实现 Trans: ({ i18nKey, children }) => { // 可根据测试需要自定义解析规则,以下是简单实现示例 const content = i18nKey ? i18nKey.replace(/<\d+\/?>/g, '') : renderToString(children); return <span dangerouslySetInnerHTML={{ __html: content }} />; },
内容的提问来源于stack exchange,提问作者ABGR
相关产品推荐
相关产品推荐

