开玩笑:等待异步测试在 运行 下一个之前完成
Jest: Wait for an async test to finish before running the next one
假设我有这些测试用例(jest
和 supertest
):
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
). 运行 此代码失败,因为尚未创建演员。
有没有办法在调用第二个测试之前等待第一个测试完成?
jestjs is just a wrapper over jasmine,在很多情况下它依赖于jasmine
的规则。
因此,您可以使用传递给 test
函数的 the same done
callback:
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 的 async documentation
中阅读更多相关信息
假设我有这些测试用例(jest
和 supertest
):
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
). 运行 此代码失败,因为尚未创建演员。
有没有办法在调用第二个测试之前等待第一个测试完成?
jestjs is just a wrapper over jasmine,在很多情况下它依赖于jasmine
的规则。
因此,您可以使用传递给 test
函数的 the same done
callback:
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 的 async documentation
中阅读更多相关信息