单元测试 – 如何以编程方式关闭ExpressJS的实例进行测试?

我试图找出如何关闭Express的实例。基本上,我想要.listen(端口)调用的反向 – 我如何获得一个Express服务器停止侦听,释放端口,并干净地关闭?

我知道这似乎可能是一个奇怪的查询,所以这里是上下文;也许有另一种方法来处理这个,我在想它的错误的方式。我试图为我的socket.io/nodejs应用程序设置一个测试框架。它是一个单页面的应用程序,所以在我的测试脚本(我使用Mocha,但这并不重要)我想能够启动服务器,运行测试,然后关闭服务器。我可以通过假设服务器在测试开始之前打开或通过使用其中一个测试启动服务器,并让每个后续测试假设它是,但是这真的很麻烦。我更喜欢让每个测试文件启动一个具有适当设置的服务器实例,然后在测试结束时关闭该实例。这意味着运行测试没有奇怪的依赖,一切都干净。这也意味着我可以做启动/关机测试。

那么,任何建议如何做到这一点?我想过手动触发例外来把它,但这似乎很乱。我已经挖通过Express docs和源,但似乎找不到任何将关闭服务器的方法。在socket.io中也可能有一些东西,但是由于套接字服务器只是连接到Express服务器,我认为这需要发生在express层。

Things have changed,因为express服务器不再从节点http服务器继承。幸运的是,app.listen返回服务器实例。

var server = app.listen(3000);

// listen for an event
var handler = function() {
  server.close();
};
http://stackoverflow.com/questions/8659011/how-do-i-programmatically-shut-down-an-instance-of-expressjs-for-testing

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:单元测试 – 如何以编程方式关闭ExpressJS的实例进行测试?