我目前在尝试创建涉及 socket.io、redis 和 express 交互的单元测试时遇到问题。我正在寻找有关如何最好地模拟这些交互的策略。例如,我正在使用 socket.io-client 来模拟 socket.io 到我的快速服务器的连接/行为,但是当我添加一个测试来检查 redis 是否存储来自 socket.io 的正确信息时,我发现自己需要还在 redis 单元测试中模拟 socket.io,这反过来意味着我需要模拟 express 服务器。这导致我似乎正在重写另一个服务器只是为了对我正在尝试测试的实际服务器进行单元测试。
有没有人必须这样做?如果是的话,你能给我指点资源吗(google/stack overflow 的结果很小)?
最佳答案
您要测试应用程序的哪一部分?
一种方法是将套接字连接封装在 socket.service.js
文件中。
const socketIO = require('socket.io');
class SocketService {
constructor(server) {
this.socket = socketIO(server);
}
initialize() {
this.socket.on('connection', socket => {
console.log('connected')
socket.on('disconnect', () => {
console.log('disconnected')
});
socket.on('register', registerHandler);
socket.on('update', updateHandler);
});
}
}
您的单元测试可能是它再次注册一个模拟服务器
,并调用initialize
方法。
如果您尝试测试所有这些一起工作,那么您就是在谈论集成和端到端测试。
关于unit-testing - 如何执行涉及 redis、socket.io 和 nodejs/express 的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48933852/