Пожалуйста, помогите мне, у меня сейчас есть задача написать интеграционный тест для моего приложения Node.js, но я не могу получить экземпляр сервера, чтобы стимулировать запрос.
Вот конфигурация сервера код
// server.js
const {
app,
} = require('./config/express');
const {
connect,
} = require('./config/mongo');
const {
port,
} = require('./config/vars');
(async function () {
const connection = await connect();
const db = connection.db;
app.locals.db = db;
app.listen(port, () => {
console.log(`Server is listening on port: ${port}`);
});
})();
module.exports = {
app,
};
Анонимная функция выше имеет , которая должна быть заключена в асинхронную c, поскольку соединение с базой данных connect
является асинхронной c функцией
// config/mongodb.js
...
module.exports.connect = async () => {
try {
const client = await MongoClient.connect(uri, options);
console.log('Database connection established');
const db = client.db(name);
return {
db,
client,
};
} catch (error) {
console.log('Error connecting to MongoDb');
process.exit(0);
}
};
...
Тогда вот как используется экземпляр подключения базы данных в Model
и Controller
.
// model/index.js
class Model {
constructor({ db }) {
this.User = new User(db);
this.video = new Video(db);
this.RefreshToken = new RefreshToken(db);
}
}
module.exports = Model;
// model/user.model.js
class User {
/**
* Create new User instance
* @param {object} collection MongoDb user collection instance
*/
constructor(db) {
this.collection = db.collection('user');
}
// controller/index.js
...
const { db } = req.app.locals;
const { User } = new Model({ db });
...
Эта конфигурация работает хорошо, когда я запускаю сервер, но это не так Работая должным образом в среде тестирования, это результат интеграционного тестового примера, который я написал
text: `{"code":500,"message":"Cannot read property 'collection' of undefined"}`,
Я знаю, что причина здесь в том, что app
в server.js
экспортируется до того, как назначен экземпляр базы данных. на app.locals.db
, но я не знаю, как заново работать с файлом конфигурации, кто-нибудь может мне помочь?