Предположим, у нас есть такой код:
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
И это вызвано только обязательным значением: истинный валидатор.Без этого проход теста.
Буду признателен за любые идеи / помощь, как решить эти тесты.