如何在Node.js中对请求响应周期进行单元测试?

时间:2012-06-20 22:28:43

标签: unit-testing node.js httprequest

例如假设我有以下

app.get('/', function(req, res) {
    var ip;
    if(req.headers['x-forwarded-for']){
        ip = req.headers['x-forwarded-for'];
    }
    else {
        ip = req.connection.remoteAddress;
    }
});

我想进行单元测试,看看是否正确检索到了ip。一种方法如下

function getIp(req) {
    var ip;
    if(req.headers['x-forwarded-for']){
        ip = req.headers['x-forwarded-for'];
    }
    else {
        ip = req.connection.remoteAddress;
    }
    return ip;
}

app.get('/', function(req, res) {
    var ip = getIp(req);
});

现在我有一个可以单元测试的函数getIp。但是我还是被困住了。如何将模拟的req对象提供给getIp?

2 个答案:

答案 0 :(得分:2)

我只想写integration - 测试。 Node.js足够快。特别是当您使用Mocha's监视模式等内容时。您可以使用superagent之类的内容或请求执行http请求。

您的http请求中还有nockmock之类的内容。虽然我从来没有使用它,因为集成测试测试真实的东西,并且足够快我的尝试。

答案 1 :(得分:0)

我建议使用mocha编写单元测试,在这种情况下,您将使用'request'作为您的http客户端。但最简单的入门方法是使用以下内容:

var http = require('http');
//Change to the ip:port of your server
var client = http.createClient(3000, 'localhost'); 

var request = client.request('GET', '/',
  {'host': 'localhost'});
request.end();
request.on('response', function (response) {
  console.log('STATUS: ' + response.statusCode);
  console.log('HEADERS: ' + JSON.stringify(response.headers));
  response.setEncoding('utf8');
  response.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});