不能用superagent停止节点服务器测试

时间:2015-10-05 12:41:05

标签: node.js express supertest

有很多与此相关的问题,但我找不到任何有用的回复,因为它适用于一个非常特殊的情况。

我在一个模块中包装express,并启动和关闭连接,如下所示:

var server = express(),
    runningInstance = {};

server._listen = server.listen;
server.listen = server.init;

// Start it up!
server.init = function(callback) {
  configure();

  runningInstance = server._listen(config.PORT, config.HOST, function() {
    logger.OK('Express server listening at %s:%d', config.HOST, config.PORT);
    if(callback && typeof callback == 'function') { return callback(); }
  });
};

server.close = function(callback) {
  if(!runningInstance.close) {
    if(callback && typeof callback == 'function') { return callback('Tried to close a server that\'s not up'); }
    else { return; }
  }

  // Once the server closes, log it and rock the callback
  if(callback && typeof callback == 'function') runningInstance.once('close', function() {
    logger.OK('Express server closed at %s:%d', config.HOST, config.PORT);
    callback();
  });

  // Stops the server from accepting new connections
  runningInstance.close(function(err) {
    if(err) {
      logger.error('Tried to close a server that\'s not up on %s:%s', config.HOST, config.PORT);
      if(callback && typeof callback == 'function') { return callback(err); }
      else { return; }
    }
  });
};

现在,我的测试:

it('Creating the server should not fail', function(done) {
  server.init(function(err) {
    expect(err).to.not.exist;
    done();
  });
});

it('Should close the server', function(done) {
  server.once('close', function() {
    request(server)
    .get('/')
    .expect(404, done);
    done();
  });

我希望服务器在关闭后给我一个404,但它实际上是以200响应。

我真的不知道为什么会这样,正在执行on('close')回调,并且服务器在请求之前不会再次启动...

0 个答案:

没有答案