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

