如何在等待 dynamodb 事件发生时添加延迟 before/during 测试(使用 supertest 和 jest)

How to add delay before/during test (using supertest & jest) while waiting for dynamodb event to occur

我正在为 Nodejs REST app in supertest & jest 编写测试,但不知道如何在执行的两个测试之间添加延迟。

我有两个顺序测试;第一个调用向 DynamoDB 发送 SNS 消息的端点,第二个检查此消息是否已到达并保存一些详细信息以供将来测试。第二个经常失败,因为 SNS 消息没有足够的时间到达 DynamoDB。我只是想在第二次测试运行之前添加某种延迟或等待以适应这种情况。

两个测试如下:

describe('User1 invite User2', () => {
    it('It should return OK and send message to User2', () => {
        return request.post('/room/' + room_id + '/invitation')
        .query({zone_id: zoneid, session_id: user1_session_id, user_id: user2_userid, token: room_token})
        .set('Authorization', user1_id_token)
        .expect(200)
    })
})


describe('User2 get invite message', () => {
    it('It should return OK with message details: room_id, room_token, user1_userid', () => {
        return request.get('/lobby/mailbox')
        .query({ session_id: user2_session_id })
        .set('Authorization', user2_id_token)
        .expect(200)
        .then((response) => {
            received_room_id = response.body.mailbox_message.room_id;
            received_room_token = response.body.mailbox_message.room_token;
            from_user = response.body.mailbox_message.sender_user_id;
            expect(received_room_id).toEqual(room_id);
            expect(from_user).toEqual(user1_userid);
        })
    })
})

我试过将第二个测试更改为 include async/await,如下所示,但不确定我是否遗漏了什么,因为它似乎不起作用。

describe('User2 get invite message', () => {
    it('It should return OK with message details: room_id, room_token, user1_userid', async () => {
        const response = await request.get('/lobby/mailbox')
            .query({ session_id: user2_session_id })
            .set('Authorization', user2_id_token)
            .expect(200);
        received_room_id = response.body.mailbox_message.room_id;
        received_room_token = response.body.mailbox_message.room_token;
        from_user = response.body.mailbox_message.sender_user_id;
        expect(received_room_id).toEqual(room_id);
        expect(from_user).toEqual(user1_userid);

    })
})

我也在请求中尝试了 including .setTimeout(),但这似乎也不起作用。

nodejs还是比较陌生,所以提前致歉!

让一个测试依赖于另一个测试的输出通常是一种不好的做法 - 在这种情况下,您不能 运行 孤立地进行第二个测试。

如何将测试合并为一个测试?您可以在单独的步骤之间放置一些 Promise based delay handler 或一些特定于应用程序的轮询机制来保证功能。