如何执行涉及redis,socket.io和nodejs / express的单元测试?

时间:2018-02-22 17:35:06

标签: unit-testing express redis socket.io

我目前遇到了尝试创建涉及socket.io,redis和express交互的单元测试的问题。我正在寻找如何最好地模仿这些互动的策略。例如,我使用socket.io-client来模拟socket.io到我的Express服务器的连接/行为,但是当我添加一个测试来检查redis是否存储来自socket.io的正确信息时我发现自己需要还在redis单元测试中模拟socket.io,这反过来意味着我需要模拟快速服务器。这导致我似乎正在重写另一台服务器只是为了测试我试图测试的实际服务器。

以前有人必须这样做吗?如果是这样你能指出我的资源(谷歌/堆栈溢出结果很少)?

1 个答案:

答案 0 :(得分:0)

您要测试应用程序的哪一部分? 一种方法是将套接字连接封装在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);
    });
  }
}

您的单元测试可能是它再次注册了一个模拟server,并调用了initialize方法。

如果您要测试所有它们一起工作的情况,那么您正在谈论集成和端到端测试。