gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:55 25 4
gpt4 key购买 nike

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

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

当然,这对于运行测试来说是 Not Acceptable 。

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

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

对于如何处理这种情况还有其他想法吗?

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

最佳答案

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

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

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

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

runYourTest(callback);

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

关于node.js - 在单元测试中关闭 Node.js http 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17884740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com