我正在使用Node.js和Express开发API,并且我使用Mocha和Supertest来编写单元测试。我有一个大的测试文件,用几乎随机的参数测试每个路由,看看我的错误处理是否运行良好。
一切都很棒,直到我的请求开始超时为止。
这或多或少是我的代码:
var supertest = require("supertest");
var should = require("should");
var server = supertest.agent("http://localhost:3000");
function requestAuth(url, type, auth, params, callback) {
if (params == null) {
server[type](url)
.type('form')
.auth(auth.email, auth.password)
.expect("Content-type",/json/)
.expect(200)
.end(callback);
}
else {
server[type](url)
.send(params)
.auth(auth.email, auth.password)
.type('form')
.expect("Content-type",/json/)
.expect(200)
.end(callback);
}
}
describe('Testing route 1', function() {
describe('Testing param 1 error handling', function() {
it('should return error 1', function(done) {
requestAuth(route1, "post", {email: email, password: password}, {param1: "blahblahblah"},
function(err, res) {
res.body.should.have.property('error');
done();
});
});
it('should return error 2', function(done) {
requestAuth(route1, "post", {email: email, password: password}, {param1: "blahblahblah"},
function(err, res) {
res.body.should.have.property('error');
done();
});
});
// etc
});
describe('Testing param 2 error handling', function() {
it('should return error 3', function(done) {
requestAuth(route1, "post", {email: email, password: password}, {param1: "blahblahblah"},
function(err, res) {
res.body.should.have.property('error');
done();
});
});
it('should return error 4', function(done) {
requestAuth(route1, "post", {email: email, password: password}, {param1: "blahblahblah"},
function(err, res) {
res.body.should.have.property('error');
done();
});
});
// etc
});
//etc
});
describe('Testing route 2', function() {
//etc
});
除了我有很多测试。 在某些时候,让我们说当我测试路由8时,每个测试都会失败,并显示以下消息:
12) Route 8 Testing Param 1 error handling should return error 1:
Error: timeout of 2000ms exceeded
at null.<anonymous> (/usr/lib/nodejs/mocha/lib/runnable.js:139:19)
at Timer.listOnTimeout (timers.js:92:15)
我真的不明白。从那以后一切运作良好,在每个请求结束时调用完成,应该是好的。即使路由正常,服务器端也没有任何事情发生。这真的很奇怪......
此外,如果路线8测试变得奇怪,并且我评论路线7测试,例如,路线9测试将开始出错。
我认为这是来自最高级的。是否可能超载?我怎么能解决这个问题?
提前感谢您的回复。
答案 0 :(得分:1)
您的测试本身有时间限制来完成您的操作。这意味着如果资源未在这两秒内设置并可用,或者测试在两秒后完成,则将失败。使用this.timeout = [milliseconds]
作为失败测试的第一行来延长超时。