测试 WebSockets 时如何阻止 Jest 挂起?
How to stop Jest from hanging when testing WebSockets?
我在 node.js 中创建了一个应用程序,它使用来自服务器上 NPM 的 'ws' 包为我提供了一个 WebSocket 接口。现在我想用 Jest 测试这个接口。测试运行成功但 Jest 没有退出并给我错误:
Jest did not exit one second after the test run has completed.
我看了文档,发现我必须在测试中使用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 在测试完成后成功停止。
我了解到我必须在测试本身关闭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());
});
});
这就是我使用 TypeScript 的方法
test('connect websockets response', (done) => {
const ws = new WebSocket(`ws://localhost:${port}`);
const listener = (msg: MessageEvent) => {
console.log(JSON.parse(msg.data));
// Put you expect statement here
ws.removeEventListener('message', listener);
ws.close();
};
ws.addEventListener('message', listener);
ws.addEventListener('close', () => done());
}, 30000);
我在 node.js 中创建了一个应用程序,它使用来自服务器上 NPM 的 'ws' 包为我提供了一个 WebSocket 接口。现在我想用 Jest 测试这个接口。测试运行成功但 Jest 没有退出并给我错误:
Jest did not exit one second after the test run has completed.
我看了文档,发现我必须在测试中使用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 在测试完成后成功停止。
我了解到我必须在测试本身关闭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());
});
});
这就是我使用 TypeScript 的方法
test('connect websockets response', (done) => {
const ws = new WebSocket(`ws://localhost:${port}`);
const listener = (msg: MessageEvent) => {
console.log(JSON.parse(msg.data));
// Put you expect statement here
ws.removeEventListener('message', listener);
ws.close();
};
ws.addEventListener('message', listener);
ws.addEventListener('close', () => done());
}, 30000);