例如假设我有以下
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?
答案 0 :(得分:2)
我只想写integration - 测试。 Node.js足够快。特别是当您使用Mocha's监视模式等内容时。您可以使用superagent之类的内容或请求执行http请求。
您的http请求中还有nock到mock之类的内容。虽然我从来没有使用它,因为集成测试测试真实的东西,并且足够快我的尝试。
答案 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);
});
});