nock 可以攔截nodejs
向外發送的HTTP請求,並模擬HTTP服務器響應,返回特定的結果,這對於接口測試非常方便。
// 例子更改自:
// https://github.com/node-nock/nock#use
// 和
// https://github.com/node-nock/nock#repeat-response-n-times
var nock = require('nock');
var http = require('http');
var couchdb = nock('http://myapp.iriscouch.com')// 攔截所有發送到這個host(支持字符串和正則表達式)的http請求
.get('/users/1')// 對發送到這個path(支持字符串和正則表達式)的http請求作出響應; 對其他path的http請求報錯
.times(2)
.reply(200, {
_id: '123ABC',
_rev: '946B7D1C',
username: 'pgte',
email: '[email protected]'
});
function _o(msg){console.log(msg);}
function doGet(path){
http.get({hostname: 'myapp.iriscouch.com', path: path}, (res)=>{
res.setEncoding('utf8');
if(res.statusCode == 200){
var newData = '';
res.on('data', (chunk)=>{ newData += chunk; });
res.on('end', () =>{
_o(newData);
});
} else{
_o('res.statusCode = ' + res.statusCode);
}
}).
on('error', (err)=>{
_o('error: ' + err);
});
}
doGet('/users/1'); // {"_id":"123ABC","_rev":"946B7D1C","username":"pgte","email":"[email protected]"}
doGet('/users/10'); // error: Error: Nock: No match for request GET http://myapp.iriscouch.com/users/10
doGet('/users/1?x=b'); // error: Error: Nock: No match for request GET http://myapp.iriscouch.com/users/1?x=b
doGet('/users/1'); // {"_id":"123ABC","_rev":"946B7D1C","username":"pgte","email":"[email protected]"}
doGet('/users/1'); // error: Error: Nock: No match for request GET http://myapp.iriscouch.com/users/1