我使用create-react-app、Jest和react-Jest library来配置聊天机器人项目。
例如,我有一个连接到WebSocket服务器的React功能组件,DOM会根据WebSocket消息进行更改
const LiveChat = () => {
const [socket, setSocket] = useState(null)
useEffect(() => {
setSocket(new WebSocket('ws://localhost:1234'))
}, [])
useEffect(() => {
socket && socket.onmessage = message => { handleAgentMessages(message.data) }
}, [socket])
const handleAgentMessages = message => {
const { messageContent, messageType, secureKey } = JSON.parse(message)
if (messageType === TEXT && messageContent) {
alert(messageContent)
playChatMessageSound()
}
...
}
return (
<div className='live-chat' data-testid='live-chat'>
...
</div>
)
}我想测试一下,当一个短信来了,警报箱出现的内容等我通过互联网,我找到了jest-websocket-mock库,但似乎我需要模拟客户端以及这个库,但我只是想模拟服务器,并期望客户端连接模拟的WebSocket服务器,你有什么想法吗?
发布于 2021-07-29 15:58:16
我不确定这是不是正确的方式。但这对我很管用,
global.sendMsg = null;
global.WebSocket = class extends WebSocket {
constructor(url) {
super("wss://test");
global.sendMsg = null
}
addEventListener(event, cb) {
if (event === "open") {
cb();
} else if(event === "message") {
global.sendMsg = cb;
}
}
};
test("testing message",() => {
render(<LiveChat />);
global.sendMsg({data:"test-msg"});
expect....
})基本上,我重写了WebSocket类并将消息事件回调存储为一个常量,并在测试中触发它以模拟服务器消息。
https://stackoverflow.com/questions/59101239
复制相似问题