【问题标题】:How do I perform unit tests involving redis, socket.io, and nodejs/express?如何执行涉及 redis、socket.io 和 nodejs/express 的单元测试?
【发布时间】:2018-02-22 17:35:06
【问题描述】:

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

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

【问题讨论】:

  • 单元测试与redis socketio或express等无关,它只是测试任何单元/模块/功能。
  • 你是说你写单元测试来检查redis是否正常工作?
  • 我想我的意思是“集成测试”。我想确保 socket.io 和 redis 根据来自 express 服务器的请求正确交互。

标签: unit-testing express redis socket.io


【解决方案1】:

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

如果您要测试所有这些功能一起工作,那么您就是在谈论集成和 e2e 测试。

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2021-03-02
    • 2013-05-27
    • 1970-01-01
    • 2014-06-27
    • 2012-01-11
    • 1970-01-01
    • 2019-05-02
    • 2012-12-11
    相关资源
    最近更新 更多