用Jest测试Websocket

时间:2019-05-03 05:02:00

标签: node.js jestjs ws

我在node.js中创建了一个应用程序,它使用服务器上npm的'ws'包为我提供了websocket界面。现在我想开玩笑地测试此接口。测试运行成功,但是玩笑没有退出,并给我一个错误“测试运行完成后一秒钟没有玩笑”。和卡住。

我阅读了文档,发现我必须在测试中使用'done'参数,并在测试完成后调用它。

服务器将在jest给定的beforeAll函数中启动,并在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();
            })
    });
});

我希望测试结束后玩笑会成功。

1 个答案:

答案 0 :(得分: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());
    });
});