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

Chai as Promised不显示错误发生位置的解决方法咨询

Chai as Promised 如何显示错误发生的具体行号?

当我用普通Chai编写失败测试时,示例代码如下:

it("Should fail 1", async () => {
    expect(1).to.equal(2);
});

得到的报错信息包含错误发生的行号,定位清晰:

Should fail 1:

      AssertionError: expected 1 to equal 2
      + expected - actual

      -1
      +2
      
      at /home/myComputer/tests/myTest.ts:10:26
      at Generator.next (<anonymous>)
      at new Promise (<anonymous>)
      at __awaiter (tests/myTest.ts:27:12)
      at Context.<anonymous> (tests/myTest.ts:45:33)
      at processImmediate (node:internal/timers:478:21)

报错明确提示AssertionError来自myTest.ts文件的第10行。

但使用Chai as Promised测试Promise时,示例代码如下:

it("my test 2", async () => {
    await expect(Promise.reject("test")).to.be.fulfilled;
});

仅能得到无位置信息的错误提示:

my test 2:
     AssertionError: expected promise to be fulfilled but it was rejected with 'test'

这给错误定位带来极大不便,请问如何配置才能让Chai as Promised显示错误发生的具体位置?

我的Chai和Chai as Promised导入方式如下:

import chai from "chai";
import chaiAsPromised from 'chai-as-promised';
chai.use(chaiAsPromised);
const expect = chai.expect;

解决方法

Chai as Promised默认会捕获原始错误并重新抛出,导致栈信息丢失。只需在启用插件时添加includeStack: true配置,即可保留完整的栈跟踪:

修改导入配置代码:

import chai from "chai";
import chaiAsPromised from 'chai-as-promised';

// 启用栈信息包含,保留错误行号
chai.use(chaiAsPromised, { includeStack: true });
const expect = chai.expect;

配置完成后,Promise断言失败时会输出包含具体行号和文件路径的完整报错栈信息,和普通Chai测试的报错格式一致。

同时确保测试框架(如Mocha)未禁用栈跟踪输出,默认情况下主流测试框架都会显示完整栈信息,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:25:15