Javascript 测试Socket.io:调用Socket.prototype.disconnect后运行断言 问题
注意:这是出于演示目的而设计的示例,不是我在项目中测试的实际代码。 我正在使用为我的服务器编写测试 我想测试在套接字断开连接后是否调用特定函数(Javascript 测试Socket.io:调用Socket.prototype.disconnect后运行断言 问题,javascript,socket.io,jestjs,Javascript,Socket.io,Jestjs,注意:这是出于演示目的而设计的示例,不是我在项目中测试的实际代码。 我正在使用为我的服务器编写测试 我想测试在套接字断开连接后是否调用特定函数(MyController.prototype.disconnect) 这是我要测试的代码: const handleDisconnect=()=>{ myController.disconnect();//我想测试是否调用了它。 log(`Socket${Socket.id}已断开连接。`); }; 插座打开(“断开”,手柄断开); 但是,在编写断言之
MyController.prototype.disconnect
)
这是我要测试的代码:
const handleDisconnect=()=>{
myController.disconnect();//我想测试是否调用了它。
log(`Socket${Socket.id}已断开连接。`);
};
插座打开(“断开”,手柄断开);
但是,在编写断言之前,我不知道如何等待执行Socket.prototype.disconnect
完成(这不是异步的)
重现问题
demo.test.js
的文件,并粘贴到下面的代码中const ioClient=require('socket.io client');
const ioServer=require('socket.io');
类MyController{
构造函数(){}
断开连接(){
log('MyController.prototype.disconnect');
}
}
描述('demo',()=>{
让端口=5000,
uri=`http://localhost:${port}`,
连接选项={
“重新连接延迟”:0,
“重新打开延迟”:0,
“强制新连接”:true,
传输:['websocket']
};
让服务器;
让我来控制;
在每个之前(()=>{
server=ioServer().listen(端口);
server.on('连接',(套接字)=>{
log(`Socket${Socket.id}已连接。`);
myController=新的myController();
const handleDisconnect=()=>{
myController.disconnect();
log(`Socket${Socket.id}已断开连接。`);
};
插座打开(“断开”,手柄断开);
});
});
每次之后((完成)=>{
server.close();
完成();
});
const createClient=()=>{
返回ioClient.connect(uri,connectOptions);
}
描述('handleDisconnect',()=>{
仅测试('当套接字断开连接时应调用MyController.prototype.disconnect',(完成)=>{
const client=createClient();
client.on('connect',()=>{
//模拟MyController.prototype.disconnect以查看是否调用了它
const myControllerDisconnectMock=jest.fn();
myController.disconnect=myControllerDisconnectMock;
client.disconnect();//我想等待这个
/**
*我想在client.disconnect()运行之后在这里放置断言
*/
console.log('foo');//但请注意,这在client.disconnect()之前运行
expect(myControllerDisconnectMock.mock.calls.length).toBe(1);
完成();
});
});
});
});
'MyController.prototype.disconnect'
未被记录,因为原型方法被模拟
Expected: 1
Received: 0
console.log demo.test.js:32
Socket OKkN21L8dBzzrRiuAAAA has connected.
console.log demo.test.js:72
foo
console.log demo.test.js:38
Socket OKkN21L8dBzzrRiuAAAA has disconnected.
使用…直接调用控制器中的断开功能。。。。并通过必要的参数,您知道socket.io将通过测试socket.io断开连接。。。想象一下,您的控制器断开连接函数被调用。直接使用….调用控制器中的断开连接函数。。。。并通过必要的参数,您知道socket.io将通过测试socket.io断开连接。。。想象一下,您的控制器断开功能被调用
jest demo.test.js
Expected: 1
Received: 0
console.log demo.test.js:32
Socket OKkN21L8dBzzrRiuAAAA has connected.
console.log demo.test.js:72
foo
console.log demo.test.js:38
Socket OKkN21L8dBzzrRiuAAAA has disconnected.