Javascript Can';t在after功能中停止express server
在函数之前,我使用此Javascript Can';t在after功能中停止express server,javascript,node.js,express,testing,Javascript,Node.js,Express,Testing,在函数之前,我使用此进行节点测试: before((done) => { app.startServer() .catch((err) => { done(err); }); }); 我现在正在尝试在之后编写一个函数,该函数将停止服务器 我曾希望这是: after(() => { app.stopServer(apiAddress) .catch((err) => { done(err); }) }); 但这
进行节点测试:
before((done) => {
app.startServer()
.catch((err) => {
done(err);
});
});
我现在正在尝试在
之后编写一个函数,该函数将停止服务器
我曾希望这是:
after(() => {
app.stopServer(apiAddress)
.catch((err) => {
done(err);
})
});
但这不起作用
以下是我的express.js
函数:
function startServer() {
return new Promise((resolve, reject) => {
app.listen(PORT, (err) => {
if (err) reject(err);
log.info(`Server listening on port ${PORT}`);
resolve();
});
});
}
function stopServer(url) {
return new Promise((resolve, reject) => {
//const server = app.listen(url);
app.close(url, (err) => {
if (err) reject(err);
log.info(`Server closed on ${url}`);
resolve();
});
});
}
如何在after函数中停止我的express
服务器?我们使用“supertest”npm包测试express.js应用程序。试试那个好东西。
根据堆栈溢出问题并查看文档
方法返回一个http.Server对象和(对于http)
是一种方便的方法,用于以下方面:
您正在调用的close
方法定义如下:
server.close([callback])
因此,您的函数应该如下所示:
function stopServer(url) {
return new Promise((resolve, reject) => {
app.close((err) => {
if (err) reject(err);
log.info(`Server closed on ${url}`);
resolve();
});
});
}
另外,您必须知道close
功能将一直挂起,直到所有连接都关闭
看看
注:
您可以使用Util.promisify
简化语法
function startServer() {
return Util.promisify(app.listen)(PORT);
}
function stopServer(url) {
return Util.promisify(app.close)();
}
before((done) => {
app.startServer()
.then(() => done)
.catch(done);
});
after(() => {
app.stopServer()
.then(() => done)
.catch(done);
});
谢谢我把它放在一个街区里。当下一个descripe块运行时,在before函数中抛出此错误:Uncaught error:listen EADDRINUSE:address ready in use:::1337
我认为旧的node.js正在运行,因此该地址已被占用。杀死进程,它就会工作。您可以使用htop
或类似于ps-aux | grep node
的命令来识别进程。或者lsof-t-i:1337
所以杀了它kill-9$(sudo lsof-t-i:1337)
我已经试过lsof-t-i:1337
。在描述块之间是否存在一些可能的异步问题?我不这么认为,之前会先执行,然后失败