8

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

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

我阅读了文档,发现我必须在测试中使用该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();
            })
    });
});

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

4

1 回答 1

18

我了解到我必须在测试本身中关闭 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());
    });
});
于 2019-05-03T05:11:55.440 回答