У меня работает express сервер, я столкнулся с проблемой при написании юнит-тестов. У меня есть функция запуска, которая подключается к базе данных, а затем возвращает сервер с app.listen (). Проблема в том, что если я возвращаю app.listen из функции asyn c, я получаю Обещание с сервером внутри него, я попытался выполнить это обещание, дождаться этого обещания, вернуть сервер из .then ( ). Я не хочу обещание, я хочу сервер.
express .ts
import express from 'express';
const app = express();
export { app };
startup.ts
import { app } from './express';
import { sequelize } from './sequelize';
app._startup = (async() => {
switch (process.env.NODE_ENV) {
case "production":
await sequelize.authenticate();
break;
case "test":
await sequelize.sync({ force: true });
break;
case "development":
default:
await sequelize.sync({ force: false });
break;
}
})().then(() => true);
export { app };
server.ts
import { app } from './startup';
// export const server = app.listen(8080); // This works
export const server = (
async() => {
await app._startup;
return app.listen(8080); // This does not work
}
)();
Поскольку сервер {} находится внутри Promise {}, все мои модульные тесты не пройдены
console.log(server);
// => Promise { Server { } }
Как можно Я разрешаю это обещание перед экспортом сервера?