javascript - 笑话:等待异步测试完成后再运行下一个测试
问题描述
假设我有这些测试用例(使用jest
and 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)
})
})
我想在运行第二个测试之前等待第一个测试完成(因为第一个创建 aActor
而第二个向 API 询问 created Actor
)。运行此代码失败,因为尚未创建参与者。
有没有办法在调用第二个测试之前等待第一个测试完成?
解决方案
jestjs只是jasmine的包装器,在许多情况下它依赖于jasmine
's 规则。
因此,您可以使用传递给函数的相同done
回调:test
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 文档中了解更多相关信息
推荐阅读
- python-2.7 - 输入错误密码时尝试弹出弹出窗口 Kivy
- java - FCM 数据消息无法正常工作
- python - 当每个视图需要处理不同的模型时,如何遵循django中的DRY原则?
- javascript - 将外部网站嵌入页面并与内容交互
- javascript - 函数的使用(回调)
- javascript - 反应循环以制作数组
- jquery - 模态显示上的自动对焦输入
- typescript - JavaScript 和 Typescript 中的模块导入之间的区别?
- html - Flexbox:如何使用子项中的文本量制作包含 div 的比例?
- swift - 如何从 URL 快速加载图像