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

如何使用Jest对外部引用的对象进行Mock?

Jest 同模块导出对象Mock方案

核心说明

当前场景为同模块内的函数引用了同模块导出的常量对象,因为ES模块导出是绑定引用,可根据你的实际需求选择对应方案实现Mock:


场景1:仅需要修改对象的属性值

如果不需要替换整个objectIWantToMock对象,只需要修改它内部的属性,直接修改导入的对象属性即可:

// ./external.test.js
import * as external from './external.js'

describe('when object is different', () => {
  // 每次测试前恢复模块原始状态,避免用例互相影响
  beforeEach(() => {
    jest.resetModules()
  })

  it('should do something different when stuff property changes', () => {
    // 直接修改导出对象的属性,函数内部读取的会是修改后的值
    external.objectIWantToMock.stuff = { testKey: 'testValue' }
    
    const result = external.functionToTest()
    // 替换为你的实际断言逻辑
    expect(result).toContain('testValue')
  })
})

场景2:需要完全替换整个对象

如果要替换整个objectIWantToMock对象(因为是const声明的常量,无法直接赋值替换),可以用jest.replaceProperty实现:

// ./external.test.js
import * as external from './external.js'

describe('when object is different', () => {
  // 每次测试后恢复所有Mock的原始值
  afterEach(() => {
    jest.restoreAllMocks()
  })

  it('should use the completely mocked object', () => {
    // 定义你要替换的Mock对象
    const mockedObject = { stuff: { newKey: 'newValue' } }
    // 替换模块导出的objectIWantToMock
    jest.replaceProperty(external, 'objectIWantToMock', mockedObject)
    
    const result = external.functionToTest()
    // 替换为你的实际断言逻辑
    expect(result).toContain('newValue')
  })
})

备选通用方案(兼容所有场景)

如果上述方案因为项目转译配置不生效,可以直接Mock整个模块:

// ./external.test.js
// 先对整个external模块做Mock,保留原模块其他逻辑的同时覆写要Mock的对象
jest.mock('./external.js', () => {
  const originalModule = jest.requireActual('./external.js')
  return {
    ...originalModule,
    objectIWantToMock: { stuff: {} }
  }
})
// 导入模块内容
import { functionToTest, objectIWantToMock } from './external.js'

describe('when object is different', () => {
  it('should use the mocked object', () => {
    // 修改Mock对象的值
    objectIWantToMock.stuff = { mockKey: 'mockValue' }
    
    const result = functionToTest()
    // 替换为你的实际断言逻辑
    expect(result).toContain('mockValue')
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:06:04