【问题标题】:Test Driven Development with a Node.js TCP Server?使用 Node.js TCP 服务器进行测试驱动开发?
【发布时间】:2012-02-13 02:42:05
【问题描述】:

我正在使用 Node.JS 编写一个简单的 TCP 服务器,以便在我开始一个更大的项目之前了解更多关于一些具体的事情。我希望在此过程中了解更多关于测试驱动开发、用户身份验证和加密的信息。对于踢球,我正在实现一个多人井字游戏,其中包含用户帐户、统计数据和随机游戏配对。

无论如何。

我的问题是,我已经为应用程序的某些部分设置了测试,但现在是时候编写 TCP 部分了。我将 Expresso 与 Should.js 结合使用,效果很好。我的问题是如何测试 TCP 服务器?我是否会反复提出要求并确保我得到了我想要的东西?或者我应该以某种方式编写服务器,使其无需首先发出请求即可进行测试? (通过抽象)

我真的很好奇。提前感谢您的洞察力!

【问题讨论】:

  • 你应该考虑改用 mocha,它是 TJ 对 Expresso 的演变(来自 Expresso 的 GitHub:“一定要查看 Expresso 的继任者 Mocha。”)。至于问题本身,我认为应该测试对 TCP 服务器的调用,但与实现分开(它本身应该是测试的目标,与 TCP 调用分开)。
  • 我完全同意使用 Mocha。我喜欢摩卡。

标签: testing node.js tcp tdd


【解决方案1】:

Node.js 让这变得非常简单。您可以直接在您的测试方法中创建您的服务器,并创建一个客户端以在该测试方法中进行连接。它会变得非常干净。

您的客户端/服务器通信将具有某种消息传递/通信合同。因此,要对这个东西进行 TDD,您将从每个消息/数据集等开始,并为此编写测试。我喜欢让 Server 封装一个 TCP 服务器,以便它可以执行自定义逻辑。

所以你可能有这样的事情:

测试1:

describe('MyServer', function(){
  it('should respond with an acknowledgment of receiving my move command', function(done){
      var server = new MyServer();
      server.listen(9000);

      var json = '{"player": "1", "tile": "3"}' //player 1 puts an 'X' in tile 3
      client = net.connect(9000, function(){
        client.write(json);
      });

      client.on('data', function(data){

        //** your tests here to validate YOUR CUSTOM server response **
        //example assuming your server sends JSON
        serverResponse = JSON.parse(data.toString());
        assert(serverResponse.tilesRemainingCount, 5); //completely custom

        server.close();
        done();
      });
    });
}

这有帮助吗?这就是我一直在做的事情,而且效果很好。如果有什么不清楚的地方请告诉我,我会尽力解决。

另外,我是一名 CoffeeScript 开发人员,所以我可能在 JS 语法上犯了错误。

【讨论】:

  • 看起来很棒! -- 只是想知道,你是如何构建你的 Node TCP 服务器代码的?我所做和看到的大部分内容都在服务器文件中设置了一个“服务器”变量。如何使该文件可以从该文件外部创建和启动? (使用我假设的导出,但是,哪种方式最好?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多