React Native测试报错:TypeError: interpolateNode is not a function
兄弟,我之前升级Reanimated版本时也碰到过类似的测试报错,给你几个具体的排查方向,你可以挨个试试:
检查测试环境的Reanimated Mock配置:Reanimated v2的原生函数在Jest测试环境里需要特殊的mock处理,默认的Jest环境不会自动识别这些函数。你可以在项目的
jest.setup.js(或者对应的测试配置文件)里添加官方推荐的mock代码:jest.mock('react-native-reanimated', () => { const Reanimated = require('react-native-reanimated/mock'); // 修复call方法的mock,避免额外报错 Reanimated.default.call = () => {}; return Reanimated; });加完之后重启测试,看看能不能解决问题。
确认代码中的导入与调用方式:虽然你说node_modules里函数存在,但还是要检查下
Drawer.tsx第518行的调用逻辑:是不是导入interpolateNode的路径正确?比如是不是写成了import { interpolateNode } from 'react-native-reanimated';?另外,有些Reanimated v2的版本里,interpolateNode可能是interpolate的别名,你可以试试替换成interpolate调用看看会不会生效。清除依赖缓存并重装:缓存问题有时候会导致模块加载异常,你可以执行以下步骤:
- 删除
node_modules文件夹 - 删除
package-lock.json(如果用npm)或者yarn.lock(如果用yarn) - 执行
npm install或yarn install重新安装依赖 - 执行
npm start -- --reset-cache清除Metro缓存,再重新运行测试
- 删除
排查测试文件的环境配置:看看你的测试文件有没有设置正确的React Native测试环境,比如有没有在文件顶部加上
/** @jest-environment react-native */?错误的环境配置可能导致Reanimated模块无法正常加载。检查是否有其他Mock干扰:如果项目里有其他第三方库的mock,有可能覆盖了Reanimated的导出。你可以暂时禁用其他非必要的mock,只保留Reanimated的mock,看看测试能不能正常运行,以此排查是不是冲突问题。
备注:内容来源于stack exchange,提问作者Olcay Ertaş

