Интеграционный тест плагина Mongoose - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь проверить работоспособность плагина mongoose. Но когда я сохраняю «любую» модель, которая реализует плагин, я никогда не получаю ответ от обещания сохранить.

Я пытался увеличить время ожидания мокко --timeout 500000, чтобы посмотреть, выдаю ли я какую-то ошибку, но всегда заканчиваю тем, что выдает ту же ошибку времени ожидания мокко. Я думаю, что когда я создаю модель во время теста, она не подключается к BD, потому что, если я делаю это с импортированной моделью, эта ошибка не возникает, но с точки зрения теста я не должен использовать логические модели. и постарайтесь сделать его максимально похожим на интеграционный тест.

Код плагина:

module.exports.myPlugin = (schema, options) => {

const mySchema = {
    someField: {
        type: mongoose.SchemaTypes.String,
    }
};
mySchema[options.fieldName] = [OrderLine.obj];
schema.add(mySchema);

const someFunction = function (orderLines) {
    // TODO: Important things.
};

schema.pre('save', function (next) {
    this.someField = someFunction();
});

schema.pre('update', function (next) {
    this.someField = someFunction();
});

};

Тестовый код:

import {myPlugin} from "../../../api/core/plugins";

const chai = require('chai');
const sinonChai = require("sinon-chai");
const chaiAsPromised = require('chai-as-promised');
const expect = chai.expect;
chai.use(chaiAsPromised);
chai.use(sinonChai);

const mongoose = require('mongoose');

const MONGO_URL = 'mongodb://username:password@127.0.0.1:27017/develop?authSource=admin';


describe('Test some important plugin', () => {

    let db;
    let ModelTest;

    before((done) => {

        mongoose.connect(MONGO_URL, {useNewUrlParser: true});
        db = mongoose.connection;
        db.on('error', console.error.bind(console, 'connection error:'));
        db.once('open', function callback () {
            const modelTestSchema = new mongoose.Schema({
                name: {
                    type: mongoose.SchemaTypes.String
                },
            });
            modelTestSchema.plugin(myPlugin, {fieldName: 'customField'});
            ModelTest = mongoose.model('ModelTest', modelTestSchema);
            done();
        });

    });

    after(function (done) {
        db.close();
        done();
    });

    it('should execute some important logic', function () {

        let model = new ModelTest({
            customField: 'my custom field value',
            name: 'test model name'
        });
        try {
            let promise = model.save();
            return Promise.all([
                expect(promise).to.eventually.be.fulfilled,
            ]);
        } catch (e) {
            console.log(e);
            return e;
        }
    });

});
...