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

为何chai-as-promised的rejected断言不生效?测试未按预期失败

问题分析与修复

你的测试没按预期失败,核心是两个关键错误:

  • 断言语法错误:chai-as-promised的正确断言是to.be.rejected,而非to.rejected。缺少be的情况下,这个表达式不会触发Promise断言逻辑,等于没做任何检查。
  • 未等待断言完成:chai-as-promised的Promise断言本身返回Promise,在async测试函数里必须用await等待它结束,否则Mocha会直接判定测试完成,不会捕获断言的失败结果。

修正后的代码

const { describe, it } = require('mocha')
const chai = require('chai')
const { expect } = require('chai')
const chaiAsPromised = require('chai-as-promised')

chai.use(chaiAsPromised)

describe('test', () => {
    it('must be rejected', async () => {
        await expect(Promise.resolve('success')).to.be.rejected
    })
})

现在运行测试就能看到预期的失败结果:因为Promise.resolve('success')是已完成状态,不符合to.be.rejected的断言要求,测试会直接报错。

如果需要更精准的错误校验,还可以用to.be.rejectedWith指定预期的错误内容:

await expect(Promise.resolve('success')).to.be.rejectedWith('预期的错误信息')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:54:55