我使用此before
函数进行Node测试:
before((done) => {
app.startServer()
.catch((err) => {
done(err);
});
});
我现在正在尝试编写一个after
函数来停止服务器。
我希望这可能是
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
服务器?
答案 0 :(得分:1)
我们使用“ supertest” npm软件包来测试Express.js应用程序。试试那个好东西。 https://www.npmjs.com/package/supertest
答案 1 :(得分:1)
app.listen()方法返回一个http.Server对象,并且(对于HTTP) 是用于以下目的的便捷方法:
您正在调用的close
方法是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);
});