Jest+TypeScript测试Forge Jira插件报错Cannot find module '@forge/bridge'求助
问题原因
@forge/bridge采用ES Module格式发布,你当前Jest配置的transformIgnorePatterns默认忽略了所有node_modules下的代码转换,Jest无法直接解析未经过babel转换的ES Module包,因此抛出找不到模块的错误。
可行解决方案
方案1:调整转换忽略规则(加载真实依赖包)
修改package.json中jest配置的transformIgnorePatterns字段,排除对@forge相关包的忽略:
"transformIgnorePatterns": [ "[/\\\\]node_modules[/\\\\](?!@forge/).+\\.(js|jsx|mjs|cjs|ts|tsx)$", "^.+\\.module\\.(css|sass|scss)$" ]
修改后Jest会对@forge开头的依赖包进行正常转换,即可正常加载模块。
方案2:Mock @forge/bridge(更推荐单元测试场景)
单元测试不需要调用真实的Forge运行时接口,直接mock依赖包即可解决问题,同时可以方便测试断言:
- 新建mock文件
jest/mocks/forgeBridgeMock.js,根据你实际使用的API补充mock实现:
// 示例mock,可根据实际使用的方法扩展 export const invoke = jest.fn().mockResolvedValue({}) export const getContext = jest.fn().mockResolvedValue({ localId: 'test-local-id', cloudId: 'test-cloud-id', moduleKey: 'test-module-key', accountId: 'test-account-id' }) export default { invoke, getContext }
- 在jest配置的
moduleNameMapper中添加映射:
"moduleNameMapper": { "^@forge/bridge$": "<rootDir>/jest/mocks/forgeBridgeMock.js", "^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy" }
修改后所有对@forge/bridge的导入都会指向mock文件,不需要调整转换规则即可正常运行测试。
内容的提问来源于stack exchange,提问作者Andre Bongartz
相关产品推荐
相关产品推荐

