Mongoose - юнит-тесты - ссылки и требуемая проблема валидатора - PullRequest
0 голосов
/ 08 сентября 2018

Предположим, у нас есть такой код:

const ProjectSchema = new Schema({
    title: {
        type: String
    },
    user: {
        type: Schema.Types.ObjectId,
        ref: 'User',
        required: true
    },
    solutions: [{ type: Schema.Types.ObjectId, ref: 'Solution' }]
});

export const Project = mongoose.model('Project', ProjectSchema);

, и мы ссылаемся на модель пользователя:

const UserSchema = new Schema({
    name: String,
    projects: [{ type: Schema.Types.ObjectId, ref: 'Project' }],
});

export const User = mongoose.model('User', UserSchema);

при тестировании таким образом:

let mockProject = {
    title: 'Nice Title'
};

let mockUser = { name: 'Joe' };

beforeEach(done => {
    userJoe = new User(mockUser);
    project = new Project(mockProject);

    project.user = userJoe;
    userJoe.projects.push(project);

    Promise.all([project.save(), userJoe.save()]).then(
        () => {
            done();
        }
    );
});

и сам тест выглядит следующим образом:

it('project saves a relation between user', done => {
    Project.findOne({ title: 'Nice Title' })
        .populate([
            {
                path: 'user',
                model: 'User',
            }
        ])
        .then((project: any) => {
            if (project) {
                expect(project.user.name).toBe('Joe');
                done();
            }
        });
});

Я получаю сообщение об ошибке:

ValidationError: user: Path `user` is required.

      at new ValidationError (node_modules/mongoose/lib/error/validation.js:30:11)
      at model.Object.<anonymous>.Document.invalidate (node_modules/mongoose/lib/document.js:1907:32)
      at p.doValidate.skipSchemaValidators (node_modules/mongoose/lib/document.js:1775:17)
      at node_modules/mongoose/lib/schematype.js:839:9

И это вызвано только обязательным значением: истинный валидатор.Без этого проход теста.

Буду признателен за любые идеи / помощь, как решить эти тесты.

...