Я пытаюсь проверить работоспособность плагина 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;
}
});
});