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

如何在Jest的__mocks__文件夹文件中覆写导出变量?

解决单个测试用例覆写mock变量的问题

核心解决思路

你导出的是可直接重新赋值的let变量,不需要用代理或spyOn这类复杂方式,直接导入mock模块的变量,在目标测试用例中修改值即可,记得测试后恢复原数值,避免影响其他用例。

具体实现步骤

  1. 在测试文件中导入mock的token变量:
import { token } from '../../modules/example';

(注:Jest会自动识别__mocks__目录下的文件作为对应模块的mock,无需额外手动调用jest.mock)

  1. 在测试用例中直接修改变量值,并用afterEach恢复原始值:
describe('测试模块', () => {
  // 保存原始token值,用于测试后还原
  const originalToken = token;

  afterEach(() => {
    // 每个测试用例结束后恢复原始值,避免污染其他用例
    token = originalToken;
  });

  test('使用默认token的测试用例', () => {
    expect(token).toBe('exampleString');
    // 执行对应测试逻辑
  });

  test('需要将token设为null的测试用例', () => {
    // 直接覆写变量值
    token = null;
    expect(token).toBe(null);
    // 执行依赖token为null的测试逻辑
  });
});

之前方法失败的原因

  • 代理拦截:仅针对函数调用或对象属性访问生效,无法拦截直接的let变量赋值操作。
  • jest.spyOn:只能用于监听对象的属性或方法,无法处理独立导出的let变量。
  • jest.unmock:你传入的路径是mock文件本身而非原模块,正确路径应为../../modules/example,但这会完全禁用mock,不符合“单个用例覆写”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:23:10