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

beforeEach/afterEach用done报Resolution method is overspecified错误如何解决

问题原因与解决方案

错误1:Resolution method is overspecified 报错

  • 触发原因:你在异步钩子中同时声明了async函数(会自动返回Promise)和done回调两种异步通知方式,测试框架(Mocha/Jest等)无法判定该以哪种信号作为异步执行完成的标志,因此抛出冲突错误。
  • 修复方案:移除钩子中的done参数与done()调用,仅保留async/await逻辑即可,修正后代码如下:
beforeEach(async () => {
  await db.migrate.rollback(migrationConfig);
  await db.migrate.latest(migrationConfig);
  await db.seed.run(seedConfig);
});

// 测试执行后清理数据库
afterEach(async () => {
  await db.migrate.rollback(migrationConfig);
});

错误2:测试通过后终端卡住无法退出

  • 触发原因:knex初始化后会维持数据库连接池的活跃连接,Node.js事件循环检测到有活跃句柄时不会自动退出进程。
  • 修复方案:添加全局后置钩子,所有测试执行完成后主动销毁knex连接池,代码如下:
// 所有测试完成后关闭数据库连接
after(async () => {
  await db.destroy();
});

补充说明

  • 你现有测试用例中的done回调不需要修改,该用例未使用async声明,仅通过done通知异步完成,不存在冲突问题。
  • 如果你使用的是Jest框架,上述销毁连接的全局钩子需替换为afterAll。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:39:01