将 async/await 更改为 Promise

Change async/await to Promise

我想更改以下async/await代码

const mongoose = require('mongoose')
const supertest = require('supertest')
const app = require('../app')

const api = supertest(app)

test("total number of blogs", async () => {
  const response = await api.get('/api/blogs')
  
  expect(response.body).toHaveLength(1)
})
      

afterAll(() => {
  mongoose.connection.close()
})

像这样的承诺:

const mongoose = require('mongoose')
const supertest = require('supertest')
const app = require('../app')

const api = supertest(app)

test("total number of blogs", () => {
  api.get('/api/blogs')
    .then( response => {
      expect(response.body).toHaveLength(1)
    })
})


afterAll(() => {
  mongoose.connection.close()
})

我无法正确解决它,并且不断收到错误消息:

在第一个版本中,您 return 测试了一个 Promise。测试库收到此承诺并等待它完成,然后再将测试视为“完成”。

所以你要做的是:

test("total number of blogs", () => {
    return api.get('/api/blogs')
      .then( response => {
        expect(response.body).toHaveLength(1)
      })
  
})

不要忘记第一个示例已经可以使用 promises(async/await 只是 promises)

编辑是因为我查看了文档 :p

为了澄清@jonrsharpe 的评论,您应该return 测试函数中的承诺:

test("total number of blogs", () => {
  return api.get('/api/blogs')
    .then( response => {
      expect(response.body).toHaveLength(1)
    })
})