用Jest测试Websocket

Fle*_*eMo 0 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();
            })
    });
});
Run Code Online (Sandbox Code Playgroud)

我希望测试结束后笑话会成功停止。

Fle*_*eMo 5

经过数小时的搜索,我发现,我必须在测试本身中关闭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());
    });
});
Run Code Online (Sandbox Code Playgroud)