Asyn c Chai утверждение о супер-реакции - PullRequest
0 голосов
/ 22 февраля 2020

Я использую Superagent (работаю с обещаниями в Async / Await) и хочу сделать несколько дополнительных утверждений в ответе Chai's Expect. Проблема в том, что для подтверждения ответа требуется какая-либо асинхронная c операция, мы не можем выполнить ее в формате подтверждения ответа, например:

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

, поэтому добавление асинхронных c утверждений выше будет выглядеть так:

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
    })
})

Который не работает и всегда проходит, и если тест не пройден, это приведет к необработанным предупреждениям об отклонении обещания!

1 Ответ

0 голосов
/ 22 февраля 2020

Согласно документации, если функция внутри .expect возвращается без исключения, она считается переданным утверждением.

Предоставление асинхронной c функции для .expect означает немедленное возвращение обещания, и это не не имеет значения, будет ли он сгенерирован позже, поэтому он пройдет.

Решение состоит в том, чтобы сделать дополнительное утверждение самостоятельно вне .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
})
...