我正在使用mocha来测试我添加到服务器的某些路由是否返回200 ok并且响应是否包含字符串。我这样做的方式如下:
var testDBRoute = function(link, routeName) {
it('should return 200 OK for ' + routeName, function (done) {
http.get(link, function (res) {
assert.equal(200, res.statusCode);
done();
})
});
it('should return the correct info',
function(done) {
http.get(link, function (res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
var response = JSON.parse(body);
assert.equal('abc', response.id);
done();
});
});
}
)
};
我以同样的方式调用此函数6次:
describe('/link1', function () {
var link = HOST + '/api/link1/';
testDBRoute(link, 'link1');
});
无论请求的顺序如何,它总是在第8次测试时失败,意味着它发出8次http获取请求,然后因此错误而失败:
错误:超过2000毫秒的超时 在null。 (\ node_modules \摩卡\ lib中\ runnable.js:158:19) 在Timer.listOnTimeout [as ontimeout](timers.js:112:15)
我必须指定我在Windows上运行测试。
答案 0 :(得分:1)
我已使用superTest来解决此问题,以此替换
var request = require('supertest');
var app = require('../server');
// app is the express context from the server
describe('GET /api', function () {
it('test api', function (done) {
request(app)
.get('/api')
.end (function (err, res) {
assert.equal(200, res.statusCode);
done();
});
});
});
所以似乎问题出在http模块......