2012-06-20 48 views
2

例如,假設我有以下我單位如何測試在Node.js的請求響應週期?

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 -tests了點。 Node.js足夠快。特別是當你使用類似Mocha's觀看模式。你可以使用類似superagent或請求執行HTTP請求。

也有類似的例如nockmock你的http請求。雖然我從來沒有使用它,因爲集成的測試測試真實的東西,並且是我的TAST不夠快。

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); 
    }); 
});