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

宿主应用Jest测试:使用虚拟模拟仍无法Mock联邦模块,需额外配置?

问题:Jest Mock模块联邦远程模块时提示找不到模块

我尝试在Jest测试中Mock一个模块联邦的远程模块,操作如下:

业务代码文件:

// eslint-disable-next-line import/no-unresolved
import { EventBus } from 'federated-module/main';

对应的测试文件:

jest.mock('federated-module/main', () => ({
  EventBus: () => void
}), { virtual: true });

运行测试时收到错误:

● Test suite failed to run

    Cannot find module 'federated-module/main' from 'path-to-file-using-modlue-federated-import/index.js'

请问是否需要在Jest配置中进行额外设置?


解决方案

需要调整Jest配置并修正Mock写法,具体如下:

  • 添加Jest模块映射配置
    在jest.config.js中配置moduleNameMapper,让Jest能识别这个联邦模块的路径,避免去查找真实的模块文件:
module.exports = {
  // 其他已有配置...
  moduleNameMapper: {
    '^federated-module/main$': '<rootDir>/__mocks__/federated-module-main.js'
  }
};

你可以在__mocks__目录下创建对应的Mock文件,内容示例:

module.exports = {
  EventBus: jest.fn()
};
  • 修正Mock函数的语法错误
    你当前Mock中的() => void是无效语法,需要改为合法的函数返回,比如空函数或Jest mock函数:
jest.mock('federated-module/main', () => ({
  EventBus: jest.fn() // 或者 () => {}
}), { virtual: true });
  • 检查Jest版本兼容性
    { virtual: true }选项要求Jest版本在26.0.0及以上,如果你的版本过低,该选项会失效,建议升级到符合要求的版本。

如果不想每个测试文件都重复写Mock代码,也可以在Jest配置的setupFilesAfterEnv中添加全局Mock脚本,一次性完成该联邦模块的Mock配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:25:40