【问题标题】:How to stop Jest from hanging when testing WebSockets?测试 WebSocket 时如何阻止 Jest 挂起?
【发布时间】:2019-05-03 05:02:00
【问题描述】:

我在 node.js 中创建了一个应用程序,它使用服务器上 NPM 的“ws”包为我提供了一个 WebSocket 接口。现在我想用 Jest 测试这个接口。测试运行成功,但 Jest 没有退出并给我错误:

Jest 在测试运行完成后一秒钟没有退出。

我看了文档发现必须在测试中使用done参数,测试完成后调用。

服务器会在beforeAll函数中启动,在Jest给出的afterAll函数中停止。

describe('app', () => {
    it('connect websockets response' (done), => {
        expect.assertions(1);

        new WebSocket(`ws://localhost:${port}`).on('message' (msg), => {
                expect(JSON.parse(msg).id).toEqual(0);
                done();
            })
    });
});

我希望 Jest 在测试完成后成功停止。

【问题讨论】:

    标签: node.js jestjs ws


    【解决方案1】:

    我了解到我必须在测试本身中关闭 WebSocket 连接,并等待关闭事件。

    describe('app', () => {
        it('connect websockets response', (done) => {
            expect.assertions(1);
    
            const ws = new WebSocket(`ws://localhost:${port}`)
                .on('message', (msg) => {
                    expect(JSON.parse(msg).id).toEqual(0);
                    ws.close();
                })
                .on('close', () => done());
        });
    });
    

    【讨论】:

    • 你有例子repro吗?
    • @SibeliusSeraphini 抱歉,我没有示例存储库。这是私人机器上的所有公司代码。因此,我不能分享更多。你到底需要它做什么?我可以通过其他方式帮助您吗?
    • 我试过这个解决方案*完全相同的结构,它只是工作。
    猜你喜欢
    • 2021-12-22
    • 2023-04-10
    • 2010-11-16
    • 2014-02-12
    • 2023-01-24
    • 2018-01-03
    • 1970-01-01
    • 2020-05-29
    • 2023-03-10
    相关资源
    最近更新 更多