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

Mocha+Chai测试REST API时断言失败却显示测试通过求助

问题解决:Mocha异步测试先通过后抛AssertionError的修复

问题原因

你的测试代码是异步HTTP请求,但没有通知Mocha等待异步操作完成。Mocha默认按同步逻辑执行,执行到request(...).end()之后就直接标记测试通过,等后续回调里的断言失败抛出错误时,测试流程已经结束,所以会在测试报告后出现未捕获的错误。

解决方案

方法1:使用Mocha的done回调

给测试函数添加done参数,在异步回调结束时调用它(错误则传入done),让Mocha等待异步操作完成:

it('janus post', (done) => {
  request('https://***')
    .post('/***')
    .attach('file', 'T:/***Test1.docx')
    .end(function(err, res) {
      if (err) return done(err);
      expect(res.status).to.be.equal(200);
      console.log(res.body);
      done();
  });
});

这样Mocha会一直等到done()被调用才结束测试,断言失败时会正确标记测试为失败。

方法2:使用Async/Await(推荐)

Supertest的请求调用本身返回Promise,用async-await语法可以更简洁地处理异步逻辑,Mocha会自动等待Promise完成:

it('janus post', async () => {
  const res = await request('https://***')
    .post('/***')
    .attach('file', 'T:/***Test1.docx');
  
  expect(res.status).to.be.equal(200);
  console.log(res.body);
});

这种写法更直观,断言失败时会直接触发测试失败,不会出现先通过再抛错的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:26