2016-09-16 105 views
0

我想嘲笑一个卷曲请求到一个调用api的快速路由。我发现了很多关于如何做到这一点的文档,但我一直有问题,因为我的代码中有一个回调。测试快速路由,该路由有回调

var request = require('request') 

function queryConsul(req, res) { 
    var options = { 
     url: 'http://10.244.68.3:8500/v1/catalog/node/services' 
    }; 

    request(options, callback) 

    function callback(error, response, body) { 
    console.log("hola?"); 
    if (!error && response.statusCode == 200) { 
     response=body 
    } 
    res.send(response) 
    } 
} 

module.exports = queryConsul; 

当我跑我目前的测试,我得到一个错误:200ms的

超时这里是我的测试中,我试图用箭扣作为存根服务,任何帮助将不胜感激! !

var queryConsul = require("../../../helper/queryConsulService"); 
var expect = require("chai").expect; 
var nock = require("nock"); 

describe("Consul API Queries",() => { 
    beforeEach(() => { 
    var consulResponse = 
    { 
    "Node": { 
    "Node": "Services", 
    "Address": "some_address", 
    "TaggedAddresses": null, 
    "CreateIndex": 72389, 
    "ModifyIndex": 72819 
}, 
"Services": { 
    "OneBitesTheDust": { 
     "ID": "OneBitesTheDust", 
     "Service": "OneBitesTheDust", 
     "Tags": ["{\"Type\" : \"service type\", \"Description\": \"ddfadf\"}"], 
     "Address": "www.google.com", 
     "Port": 80, 
     "EnableTagOverride": false, 
     "CreateIndex": 72819, 
     "ModifyIndex": 72819 
    }, 
    "anotherOneBitesTheDust": { 
     "ID": "anotherOneBitesTheDust", 
     "Service": "anotherOneBitesTheDust", 
     "Tags": ["{\"Type\" : \"service type\", \"Description\": \"ddfadf\"}"], 
     "Address": "www.google.com", 
     "Port": 80, 
     "EnableTagOverride": false, 
     "CreateIndex": 72465, 
     "ModifyIndex": 72465 
    }, 
    "newService": { 
     "ID": "newService", 
     "Service": "newService", 
     "Tags": ["{\"Type\" : \"service type\", \"Description\": \"ddfadf\"}"], 
     "Address": "www.google.com", 
     "Port": 80, 
     "EnableTagOverride": false, 
     "CreateIndex": 72389, 
     "ModifyIndex": 72389 
    } 
    } 
} 

nock("http://10.244.68.3:8500") 
    .get('/v1/catalog/node/services') 
    .reply(200, consulResponse); 
}); 

it("returns a status code of 200 when the services domain is queried", function(done) { 
    queryConsul(function(err, res){ 
     console.log(res); 
     expect(res.statusCode).to.equal(200, done); 
    }); 
    }); 
}); 

回答

0

所以经过更多的挖掘,我们计算出来了。我们完全改变了我们的代码,并使用该真棒NPM(节点包管理器)

请求,承诺宝石...(请务必添加“JSON:真”的选项

var express = require('express'); 
var router = express.Router(); 
var request = require('request-promise') 


router.get('/', function(req, res, next) { 
    res.render('index') 
}); 

router.get('/data', function(req, res, next){ 
    var options = { 
    uri: 'http://10.244.68.3:8500/v1/catalog/node/services', 
    json: true 
}; 
    request(options).then(function(result){ 
    res.send(result) 
    }).catch(function(err){ 
    res.send(err) 
    }) 
}) 


module.exports = router; 

下面是如何我们创建了测试,以达到此路线(“/数据”),创建一个模拟,并给我们带回了我们所期望的

var expect = require("chai").expect; 
var nock = require("nock"); 
var app = require('../../../app'); 
var request = require("supertest") 

var consulResponse 

describe("Consul API Queries",() => { 
    beforeEach(() => { 
    consulResponse = 
    { 
    "Node": { 
     "Node": "Services", 
     "Address": "some_address", 
     "TaggedAddresses": null, 
     "CreateIndex": 72389, 
     "ModifyIndex": 72819 
    }, 
    "Services": { 
     "OneBitesTheDust": { 
      "ID": "OneBitesTheDust", 
      "Service": "OneBitesTheDust", 
      "Tags": ["{\"Type\" : \"service type\", \"Description\":  \"ddfadf\"}"], 
      "Address": "www.google.com", 
      "Port": 80, 
      "EnableTagOverride": false, 
      "CreateIndex": 72819, 
      "ModifyIndex": 72819 
     }, 
     "anotherOneBitesTheDust": { 
      "ID": "anotherOneBitesTheDust", 
      "Service": "anotherOneBitesTheDust", 
      "Tags": ["{\"Type\" : \"service type\", \"Description\": \"ddfadf\"}"], 
      "Address": "www.google.com", 
      "Port": 80, 
      "EnableTagOverride": false, 
      "CreateIndex": 72465, 
      "ModifyIndex": 72465 
     }, 
     "newService": { 
      "ID": "newService", 
      "Service": "newService", 
      "Tags": ["{\"Type\" : \"service type\", \"Description\": \"ddfadf\"}"], 
      "Address": "www.google.com", 
      "Port": 80, 
      "EnableTagOverride": false, 
      "CreateIndex": 72389, 
      "ModifyIndex": 72389 
     } 
     } 
    } 

    nock("http://10.244.68.3:8500") 
     .get('/v1/catalog/node/services') 
     .reply(200, consulResponse); 
    }); 

    it("returns a status code of 200 when the services domain is queried",() => { 
    var scope = nock("http://10.244.68.3:8500") 
     .get('/v1/catalog/node/services') 
     .reply(200, "no way are we getting this to work"); 
    expect(scope.interceptors[0].statusCode).to.equal(200); 
    }); 


    it("gets the data from consul", (done) => { 
    request(app).get('/data') 
     .expect(consulResponse, done) 

    }) 

}); 

的问题是,请求不用手承诺为的就是让你需要的要求 - 鼓励宝石去实现这个目标,一旦你得到了这个机会,你应该很好去!