2

例如假设我有以下

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?

4

2 回答 2

2

我会为此编写集成测试。Node.js 足够快。尤其是当您使用类似Mocha 的手表模式时。您可以使用superagent或 request 之类的东西来执行 http 请求。

还有类似nock的东西来模拟你的 http 请求。尽管我从未使用过它,因为集成测试测试的是真实的东西并且速度足够快,可以满足我的口味。

于 2012-06-21T05:31:30.003 回答
0

我建议使用mocha编写单元测试,在这种情况下,您将使用“请求”作为您的 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);
  });
});
于 2012-06-21T20:26:55.567 回答