js动态导入测试需用async/await处理promise,通过jest.mock()模拟模块并控制resolve/reject,配置jsdom环境支持esm,注意清理缓存防污染。

前端应用中 JS 动态导入(import())本质是返回 Promise,测试时需按异步逻辑处理,核心是 等待导入完成、验证模块行为、清理副作用。
用 async/await + jest.mock() 模拟动态导入
避免真实网络请求或文件加载,用 jest.mock() 拦截模块路径并返回可控的模拟模块:
- 在测试前调用
jest.mock('./module.js'),Jest 会自动替换该路径的动态导入结果 - 配合
mockResolvedValue返回带方法的对象,例如:const mockModule = { doSomething: jest.fn().mockReturnValue('ok') };<br>jest.mock('./module.js', () => Promise.resolve(mockModule)); - 测试函数中用
await import('./module.js'),它会立即 resolve 为 mockModule
测试真实导入逻辑(需启用 ESM 或使用 testEnvironment: 'jsdom')
若要测实际加载行为(如代码分割、懒加载),需确保测试环境支持动态 import():
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- Jest 默认不支持 ESM 动态导入,推荐在
jest.config.js中配置:testEnvironment: 'jsdom',<br>transform: {'^.+\.jsx?$': 'babel-jest'},<br>moduleNameMapper: {'\.(css|less|scss|sass)$': 'identity-obj-proxy'} - 写测试时用
async test,显式await import(...),再断言模块导出内容是否符合预期 - 注意:真实导入可能受路径、打包工具(如 Webpack 的魔法注释)影响,测试前确认构建产物中模块可被正确解析
覆盖错误场景:模拟导入失败
动态导入失败会 reject,需测试错误处理逻辑(如 fallback、loading 状态更新):
- 用
jest.mock()返回Promise.reject(new Error('load failed')) - 用
await expect(import('./bad.js')).rejects.toThrow('load failed')断言异常 - 若业务中用了
try/catch或.catch(),需验证错误发生后 UI 状态或日志是否正确响应
清理模块缓存(避免测试间污染)
Node.js 和 Jest 会缓存 import() 结果,连续测试可能读到旧模块:
- 在
beforeEach或afterEach中清除模块缓存:jest.resetModules(); // 重置自动 mock 状态<br>// 或手动删除 require.cache 中相关路径
- 对同一路径多次 import 测试,建议每次用唯一路径 mock,或在 mock 函数中用
jest.fn()控制返回值变化
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










