为什么我的超时超时?

时间:2016-10-11 14:12:23

标签: node.js express mocha supertest

我正在使用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测试将开始出错。

我认为这是来自最高级的。是否可能超载?我怎么能解决这个问题?

提前感谢您的回复。

1 个答案:

答案 0 :(得分:1)

您的测试本身有时间限制来完成您的操作。这意味着如果资源未在这两秒内设置并可用,或者测试在两秒后完成,则将失败。使用this.timeout = [milliseconds]作为失败测试的第一行来延长超时。

MochaJS Test Level Timeouts