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

Jest测试出现localForage.createInstance is not a function错误如何解决

报错根因

这个错误出现的核心原因是测试运行环境中,导入的localforage模块不是完整的官方导出对象:要么是模块被异常mock后丢失了createInstance方法,要么是测试环境(如jsdom)对IndexedDB相关API的兼容问题导致localforage初始化异常,最终暴露的对象不存在目标方法。

可行解决方案

方案1:全局mock localforage模块(适用于多测试文件依赖localforage的场景)

  1. 在你的测试目录下新建__mocks__/localforage.js文件,写入以下mock内容:
const mockLocalForage = {
  createInstance: jest.fn(() => ({
    driver: jest.fn(),
    getItem: jest.fn(() => Promise.resolve(null)),
    setItem: jest.fn(() => Promise.resolve()),
    removeItem: jest.fn(() => Promise.resolve()),
    clear: jest.fn(() => Promise.resolve()),
    length: jest.fn(() => Promise.resolve(0)),
    key: jest.fn(() => Promise.resolve(null)),
    keys: jest.fn(() => Promise.resolve([])),
    iterate: jest.fn(() => Promise.resolve()),
  })),
  INDEXEDDB: 'asyncStorage',
  // 可根据业务需求补充你用到的其他localforage常量和方法
}

export default mockLocalForage
  1. 在jest配置(或单测试文件顶部)开启该mock:
jest.mock('localforage')

方案2:单测试文件内直接注入mock(适用于仅单个测试文件依赖该Context的场景)

在你编写测试用例的文件最顶部,写入以下mock代码,保证该代码执行顺序优先于你的组件和Context导入:

jest.mock('localforage', () => ({
  createInstance: jest.fn(() => ({
    getItem: jest.fn().mockResolvedValue(null),
    setItem: jest.fn().mockResolvedValue(undefined),
    // 补充你业务逻辑中用到的localforage实例方法
  })),
  INDEXEDDB: 'indexedDB',
}))

方案3:直接mock Context绕开localforage初始化(推荐,单元测试组件时最优解)

如果你的测试核心目标是验证组件逻辑而非localforage存储逻辑,完全可以直接绕过Context的真实初始化,传入mock的Context值即可:

import { FeatureContext } from '你的Context文件路径'
import { render, screen } from '@testing-library/react'
import TestComponent from '你的组件路径'

test('测试组件逻辑', () => {
  const mockContextValue = {
    // 填入你的组件实际用到的Context中的属性和方法,全部用jest.fn()模拟即可
    getStoreValue: jest.fn().mockResolvedValue('测试值'),
    setStoreValue: jest.fn().mockResolvedValue(undefined),
  }

  render(
    <FeatureContext.Provider value={mockContextValue}>
      <TestComponent />
    </FeatureContext.Provider>
  )

  // 后续编写你的测试断言逻辑即可
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:03