React Native项目Jest测试报WalletLib.WalletClient不是构造函数如何解决
Jest 自定义SDK mock报错解决方案
错误根源
你的mock导出结构与真实SDK的导出结构不匹配:
- 真实运行场景下
import * as WalletLib from 'wallet-lib'得到的WalletLib对象下直接挂载WalletClient构造函数 - 你编写的mock在模块导出对象下额外加了一层
WalletLib属性,导致实际访问WalletLib.WalletClient时拿到的是undefined,触发「不是构造函数」的报错
修复方案
将mock调整为和真实SDK一致的导出结构即可:
jest.mock('wallet-lib', () => { return { // 直接在模块根导出下挂载WalletClient构造函数 WalletClient: jest.fn().mockImplementation(() => { // 若WalletClient实例有要调用的方法,可在这里补充对应mock,示例: // getBalance: jest.fn().mockResolvedValue(100), // signTransaction: jest.fn().mockResolvedValue('mock_transaction_hash') return {} }) // 如果SDK还有其他导出属性/方法,按真实结构在这里补充即可 } })
额外注意事项
- 如果多个测试文件都用到了这个SDK,可以把这段mock代码放到项目的jest全局配置文件(通常是
jest.setup.js)里,避免每个测试文件重复编写 - 确保mock代码的执行顺序早于业务代码对
wallet-lib的导入,一般把jest.mock写在测试文件所有import语句之前即可生效
内容的提问来源于stack exchange,提问作者Muhammad Afaq Raiz
相关产品推荐
相关产品推荐

