Jest: 在运行下一个测试之前等待异步测试完成

7
假设我有这些测试用例(使用 jestsupertest):
describe('Test actors', async () => {
  const params = { /* ... */ }
  let actorId

  test(`Create an actor ${actorsUrl}`, async () => {
    const response = await request(app.callback())
      .post(actorsUrl)
      .send(params)
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/json')
      .expect(200)
    expect(response.body.name).toBe(params.name)
    expect(response.body.address).toBe(params.address)
    actorId = response.body.id
  })

  test(`Get the actor created ${actorsUrl}/${actorsUrl}`, async () => {
    const response = await request(app.callback())
      .get(`${actorsUrl}/${actorsUrl}`)
      .set('Accept', 'application/json')
      .expect(200)
    expect(response.body.name).toBe(params.name)
    expect(response.body.address).toBe(params.address)
  })
})

我希望在运行第二个测试之前等待第一个测试完成(因为第一个测试创建了一个 Actor,而第二个测试会请求API获取已创建的 Actor)。运行此代码会失败,因为Actor尚未创建。

是否有一种方法可以在调用第二个测试之前等待第一个测试完成?

1个回答

10

只是的一个包装器,在许多情况下,它依赖于Jasmine的规则。

因此,您可以利用传递给test函数的相同的done回调函数

test(`Create an actor ${actorsUrl}`, async (done) => {
    const response = await request(app.callback())
      .post(actorsUrl)
      .send(params)
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/json')
      .expect(200)
    expect(response.body.name).toBe(params.name)
    expect(response.body.address).toBe(params.address)
    actorId = response.body.id
    done();
})
test(`Get the actor created ${actorsUrl}/${actorsUrl}`, async (done) => {
    const response = await request(app.callback())
      .get(`${actorsUrl}/${actorsUrl}`)
      .set('Accept', 'application/json')
      .expect(200)
    expect(response.body.name).toBe(params.name)
    expect(response.body.address).toBe(params.address)
    done();
})

您可以在jest的异步文档中了解更多相关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接