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
相关产品推荐
相关产品推荐

