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

如何在JavaScript中正确导入异步module.exports函数并解决测试中的await使用报错问题

解决Jest测试中无法await异步函数的问题

你的问题根本不是导入方式的问题,而是测试函数本身没标记为异步,导致await无法正常工作,Jest也没法正确等待异步操作完成,才会出现那些误导人的报错(比如提示func不是异步函数)。

先给你修正后的测试代码,完全不用改index.js:

const exportedModule = require('./index');
// 核心改动:给test的回调函数加上async关键字
test('Successfully execute func when empty object passed', async () => {
  const obj = {};
  const expectedReturn = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Success!',
      input: obj,
    }),
  };
  const actualReturn = await exportedModule.func(obj);
  console.log(actualReturn);
  // 额外提醒:用toEqual代替toBe,因为toBe检查对象引用,而我们需要比较内容
  expect(actualReturn).toEqual(expectedReturn);
});

为什么之前会报错?

Jest的测试回调如果要使用await,必须把这个函数声明为async——否则JS引擎会直接抛出语法错误,Jest也会误以为异步操作没完成就结束了测试,进而出现各种混乱的报错信息(比如误判func不是异步函数)。

另外你之前用toBe比较两个对象的写法也有问题:toBe是严格比较引用地址,而actualReturn和expectedReturn是两个独立的对象实例,哪怕内容完全一样,toBe也会判定不相等。换成toEqual就能递归比较对象的所有属性值,符合你的测试预期。

你的导入方式完全没问题,require('./index')已经正确获取到了导出的模块,func确实是异步函数,所有调整都只在测试文件里完成就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:49:05