Nodejs中,使用nock做http請求的mock

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章