在单元测试中关闭Node.js http服务器

时间:2013-07-26 14:58:26

标签: node.js unit-testing webserver application-shutdown

假设我有一些测试Web服务器的单元测试。由于我不想在这里讨论(外部范围;-)),每个测试都需要一个新启动的服务器。

只要我不向服务器发送请求,一切都很好。但是一旦我这样做,对http服务器的close函数的调用就不会按预期工作,因为所有发出的请求都会导致保持连接,因此服务器会在实际关闭之前等待120秒。

当然,这对于运行测试是不可接受的。

目前,我看到的唯一解决方案是

  • 将保持活动超时设置为0,因此对close的调用实际上会关闭服务器,
  • 或者在不同的端口上启动每个服务器,尽管当你进行大量测试时这很难处理。

关于如何处理这种情况的任何其他想法?

PS:我刚才有一个问How do I shutdown a Node.js http(s) server immediately?,并找到了解决问题的可行方法,但因为看起来这种解决方法在每种情况下都不能可靠运行,因为我变得很奇怪结果不时。

1 个答案:

答案 0 :(得分:1)

function createOneRequestServer() {
    var server = http.createServer(function (req, res) {
        res.write('write stuff');
        res.end();
        server.close();
    }).listen(8080);
}

您还可以考虑使用进程来分叉进程并在对该进程进行测试后终止它们。

var child = fork('serverModuleYouWishToTest.js');

function callback(signalCode) {
    child.kill(signalCode);
}

runYourTest(callback);

这种方法是可取的,因为它不需要您编写服务器的特殊情况来仅为一个请求提供服务,并使您的测试代码和生产代码保持100%独立。