对超测响应的异步 chai 断言

Posted

技术标签:

【中文标题】对超测响应的异步 chai 断言【英文标题】:Async chai assertion on supertest response 【发布时间】:2020-06-06 09:33:10 【问题描述】:

我正在使用 Superagent(通过 Async/Await 处理 Promise)并希望对 Chai 的 Expect 响应做一些额外的断言。问题是当响应断言需要任何异步操作时,我们无法以响应断言格式执行它,例如:

it('should check for something on response', async () => 
  await superagent(app)
    .expect(200)
    .expect(res => 
      chai.expect(res.body).to.have.property('something')
    )
)

所以在上面添加异步断言就像:

it('should check for something async on response', async () => 
  await superagent(app)
    .expect(200)
    .expect(async res => 
      chai.expect(await checkForSmth(res.body)).to.be.true
    )
)

哪个不起作用并且总是通过,当测试失败时会导致未处理的 Promise 拒绝警告!

【问题讨论】:

【参考方案1】:

根据文档,如果 .expect 中的函数无异常返回,则视为已通过断言。

.expect提供一个异步函数意味着立即返回一个promise,之后抛出也无所谓,所以它会通过。

解决方案是使用 Superagent 调用的返回值,在 Superagent 的 .expect 之外自己进行额外的断言。类似:

it('should check for something async after getting the response', async () => 
  const res = await superagent(app)
    .expect(200)
  chai.expect(await checkForSmth(res.body)).to.be.true
)

【讨论】:

以上是关于对超测响应的异步 chai 断言的主要内容,如果未能解决你的问题,请参考以下文章

Postman之Tests断言应用

Chai 断言,无法使用应该/期望来识别属性

断言正在破坏 Mocha 测试中的异步功能

如何使用页面对象在 Nightwatch.js 中运行多个 chai 断言?

对chai断言的学习总结

Solidity:使用 waffle + chai 测试恢复的断言不起作用