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

标签 unit-testing express redis socket.io

我目前在尝试创建涉及 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/

相关文章:

redis - "glob"样式模式是否应保留为字符串!还是有更聪明的方法?

redis - 具有 Redis 代理的 celery worker 无法执行 Django 任务

python - Heroku中的Django Redis连接错误: Error 110 while writing to socket.连接超时

unit-testing - 您将如何对包含哈希表数据类型的函数进行单元测试?

javascript - 自定义事件参数未在测试中正确传递

javascript - 从一个函数内部的 request.get 返回变量值到另一个 NODEJS 表达式

javascript - express.js 解析 cookie 吗?

android - 使用 Dispatchers.IO 进行 Kotlin 协程测试

angularjs 指令单元测试因controllerAs、bindToController 和isolateScope() 失败

node.js - 在 NextJS 的 API 上使用路径参数