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

如何在Jest测试中Mock其他文件的导入修改依赖常量值?

在Jest中Mock导入的常量值测试函数

先修正下原代码里的路径问题:func/b.ts中导入isOn的路径写错了,应该从../const/a.ts导入,而不是../func/a.ts,否则会找不到模块。

要MockisOn的值为true来测试isMachineOn(),有两种常用实现方式:

方法一:直接Mock整个模块

这种方法适合所有测试用例都需要固定Mock值的场景:

// __test__/b.test.ts
import { isMachineOn } from '../func/b';
import { isOn } from '../const/a';

// Mock const/a模块,强制将isOn设为true
jest.mock('../const/a', () => ({
  isOn: true
}));

test('isMachineOn 应返回true(Mock后的isOn值)', () => {
  expect(isMachineOn()).toBe(true);
});

方法二:动态Mock(支持不同用例修改值)

如果需要在不同测试用例中切换isOn的Mock值,可以用jest.spyOn结合getter Mock:

// __test__/b.test.ts
import { isMachineOn } from '../func/b';
import * as aModule from '../const/a';

// 每个测试前清空Mock,避免用例间干扰
beforeEach(() => {
  jest.clearAllMocks();
});

test('isMachineOn 在isOn被Mock为true时返回true', () => {
  // 因为isOn是常量,需要指定'get'参数来Mock其getter
  const isOnSpy = jest.spyOn(aModule, 'isOn', 'get').mockReturnValue(true);
  
  expect(isMachineOn()).toBe(true);
  
  isOnSpy.mockRestore(); // 测试结束后恢复原常量值
});

test('isMachineOn 使用原常量值时返回false', () => {
  expect(isMachineOn()).toBe(false);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:34:51