2011-01-19 60 views
2

我刚刚开始一个node.js项目,并且正处于编写我的第一个单元测试的阶段。node.js当客户端处于与服务器相同的进程中时,“由对等端重置连接”

在单元测试中,我启动一个服务器,然后创建一个客户端并向服务器发送一个请求。我会在回应中做出断言。

现在,如果我做到这一点使用两个独立的js文件,一个用于启动服务器,其他客户端,我在不同的节点实例上运行他们,它工作正常。服务器启动后,我运行其他js,客户端成功请求该请求。

但是,如果我把相同的代码到一个单一的JS和一个节点实例中运行它,我得到“连接被对方​​复位”的错误,当客户端试图连接。我尝试使用setTimeout在服务器启动后将请求延迟几秒钟,然后尝试捕获套接字上的错误。这两种方法似乎都没有帮助。

我真的很希望能够将这个作为一个单独的过程来运行。它使编写和管理单元测试变得更加容易。有谁知道我做错了什么?

由于 马丁

回答

1

documentation

server.listen(端口,[主机名], [回调])开始接受在指定端口上 连接和 主机名。如果主机名被省略, 服务器将接受指向任何IPv4地址 (INADDR_ANY)的连接 。

要收听Unix套接字,供应 文件名而不是端口和主机名。

此功能是异步的。当服务器绑定到端口 时, 最后一个参数回调将被称为 。

server.listen(路径,[回调])

我想你应该从callback里面做单元测试?

至少它对我有用。我正在使用express.js,因为它很棒。我也使用wwwdude发出http请求,但以下代码段对我来说确实有效:

const PORT = 1234; 
const HOST = 'localhost'; 

const assert = require('assert'); 
const wwwdude = require('wwwdude'); 
const express = require('express'); 
const app = module.exports = express.createServer(); 
const client = wwwdude.createClient({ 
    headers: { 'User-Agent': 'wwwdude test 42' }, 
}); 

app.use(
    express.staticProvider(__dirname + '/public') 
); 

app.get('/', function(req, res) { 
    res.send('Hello World!'); 
}); 

if (!module.parent) { 
    app.listen(PORT, HOST, function() { 
     client.get('http://localhost:1234') 
     .addListener('error', function (err) { 
     }).addListener('success', function (data, resp) { 
      assert.equal('Hello World!', data); 
      process.exit(); 
     }).send(); 
    }); 
} 
+0

感谢您的回复。但是,我不确定它是如何回答我的问题的。在文档中我看不到任何东西,如果你在同一个进程中连接到来自客户端的服务器,你需要做任何特殊的事情。也许我只是很慢,你能拼出来给我吗? – martinp999 2011-01-20 20:46:12

相关问题