收到异步超时错误时如何用笑话测试快速应用程序?



我正在测试以下端点:

app.post('/api/master/makeLeaderInZone', authenticateMaster, (request, response) => {
var body = _.pick(request.body, ['zoneId', 'leaderId'])
Zone.findById(body.zoneId).then((zone) => {
if (zone) {
return zone.addLeader(body.leaderId)
} else {
return Promise.reject()
}
}).then(() => {
return Volunteer.findById(body.leaderId)
}).then((volunteer) => {
if (volunteer) {
return volunteer.addToZoneAsLeader(body.zoneId)
} else {
return Promise.reject()
}
}).then(() => {
response.status(200).send()
}).catch((error) => {
response.status(400).send()
})
})

这是我正在使用的测试:

describe('makeLeaderInZone', () => {
test('neither zone nor volunteer valid',  () => {
request(app)
.post('/api/master/makeLeaderInZone')
.set('master-auth', 'master')
.send().expect(400)
})
})

当我使用邮递员测试它时,这个端点运行良好。但是,通过此测试,我收到以下错误:

超时 - 在 5000 毫秒超时内未调用异步回调 由 jest.setTimeout 指定。错误:超时 - 异步回调不是 在 jest.setTimeout 指定的 5000 毫秒超时内调用。

如本答案所述,我在测试中添加了以下代码行,以使开玩笑等待更长的时间才能完成我的请求:

jest.setTimeout(30000);

但是,我仍然得到了完全相同的错误。就好像开玩笑忽略了这条线,只等了5000ms。

我应该怎么做才能使这个测试工作?

只是为了确认,您是否将 setTimeout 选项添加到此处引用的 jest.setup.js 文件中?

https://jestjs.io/docs/en/configuration#setupfilesafterenv-array

为了逐个测试地设置它,您需要将其设置为测试的第三个参数。

test('example', async () => {
await new Promise(resolve => setTimeout(resolve, 1000));
}, 500);

所以在你的例子中,它会是

describe('makeLeaderInZone', () => {
test('neither zone nor volunteer valid',  () => {
request(app)
.post('/api/master/makeLeaderInZone')
.set('master-auth', 'master')
.send().expect(400)
}, 30000)
})

我终于想通了。我不知道为什么,但出于某种原因,如果我输入以下代码行:

jest.setTimeout(30000);

在测试函数本身中,jest 只是忽略它并使用默认超时值 5000 毫秒。但是如果我把这一行放在描述块内,但在测试本身之外,就像这样:

describe('makeLeaderInZone', () => {
jest.setTimeout(10000)
test('neither zone nor volunteer valid', async () => {
await request(app)
.post('/api/master/makeLeaderInZone')
.set('master-auth', 'master')
.send().expect(400)
})
})

它运行良好并等待我的请求完成(大约需要 8.5 秒(。

最新更新