如何以编程方式closuresExpressJS的实例进行testing?

我想弄清楚如何closuresExpress的一个实例。 基本上,我想要.listen(port)调用的反向 – 我如何获得一个Express服务器停止监听,释放端口,并干净关机?

我知道这似乎可能是一个奇怪的查询,所以这里是上下文; 也许还有另一种方法来解决这个问题,我正在考虑错误的方式。 我正在尝试为我的socket.io/nodejs应用程序设置一个testing框架。 这是一个单页面的应用程序,所以在我的testing脚本(我使用摩卡 ,但这并不重要),我想能够启动服务器,运行testing,然后closures服务器。 我可以通过假设服务器在testing开始之前打开,或者通过其中一个testing启动服务器,并且随后的每个testing都假定它已经启动,但是这真的很混乱。 我更愿意让每个testing文件都以适当的设置启动一个服务器实例,然后在testing结束时closures这个实例。 这意味着没有奇怪的依赖运行testing,一切都是干净的。 这也意味着我可以做启动/关机testing。

那么,有关如何做到这一点的任何build议? 我曾经想过手动触发exception来使它失效,但这似乎很混乱。 我已经挖掘了快速文档和来源,但似乎无法find任何方法,将closures服务器。 在socket.io中也可能有这样的一些东西,但是由于套接字服务器只连接到了Express服务器,所以我认为这需要在快速层进行。

事情已经改变,因为快递服务器不再从节点http服务器inheritance。 幸运的是,app.listen返回服务器实例。

 var server = app.listen(3000); // listen for an event var handler = function() { server.close(); }; 

使用app.close() 。 完整的例子:

 var app = require('express').createServer(); app.get('/', function(req, res){ res.send('hello world'); }); app.get('/quit', function(req,res) { res.send('closing..'); app.close(); }); app.listen(3000); 

调用app.close()时,在testing结束时callback。 但请记住,这个过程仍在运行(尽pipe它不再听)。

如果在此之后,您需要结束进程,然后调用process.exit(0)

链接:

app.close: http ://nodejs.org/docs/latest/api/http.html#server.close(同样适用)

process.exit: http : //nodejs.org/docs/latest/api/process.html#process.exit

你可以通过编写一个bash脚本来启动服务器,运行testing并停止服务器。 这样做的好处是允许您使用该脚本的别名来快速轻松地运行所有testing。

我在整个持续部署过程中使用这样的脚本。 你应该看看Jon Rohan的“简单的Git工作stream程”来了解一些这方面的知识。