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

