Проблемы при написании тестовых случаев для приложения Nodejs - PullRequest
0 голосов
/ 18 января 2020

Пожалуйста, помогите мне, у меня сейчас есть задача написать интеграционный тест для моего приложения 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, но я не знаю, как заново работать с файлом конфигурации, кто-нибудь может мне помочь?

...