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

Jest未加载手动Mock文件,目录结构无误,问题出在哪?

解决Jest手动Mock未生效的问题

我仔细看了你的代码和目录结构,问题主要出在Mock文件的写法不符合class导出的场景,另外还有一个小细节需要调整,下面一步步说:

1. 修正Mock文件的写法

你的源文件Foo.js导出的是一个class,而你当前的Mock是直接给jest.genMockFromModule返回的对象添加doStuff方法——这只会修改构造函数本身的属性,不会影响通过new Foo()创建的实例的方法(实例的方法来自class的原型)。

你可以选择两种正确的Mock写法:

写法一:直接模拟class

// src/adapters/__mocks__/Foo.js
class MockFoo {
  doStuff() {
    return { source: 'mock' };
  }
}

module.exports = MockFoo;

写法二:基于jest.genMockFromModule修改原型方法

如果你想保留jest.genMockFromModule的自动Mock能力,需要修改class原型上的方法:

// src/adapters/__mocks__/Foo.js
const Foo = jest.genMockFromModule('../Foo');

// 修改原型上的doStuff,这样实例调用时会使用Mock方法
Foo.prototype.doStuff = function() {
  return { source: 'mock' };
};

module.exports = Foo;

2. 在测试文件中显式触发Mock

虽然Jest默认会自动识别__mocks__目录下的文件,但为了确保Mock生效,建议在测试文件开头显式调用jest.mock('../Foo'),告诉Jest加载你的手动Mock:

// src/adapters/__tests__/Foo.js
const Foo = require('../Foo');

// 显式启用Mock
jest.mock('../Foo');

test('Foo', () => {
  const foo = new Foo();
  expect(foo.doStuff()).toEqual({ source: 'mock' });
});

额外检查(可选)

如果还是没生效,可以确认你的Jest配置中,moduleDirectories包含了src目录,确保Jest能正确找到模块和对应的Mock文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:51