Это моя схема:Mongoose не проверки типа: [SimSchema]
tango.schema.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var notEmpty = [function(arr) {
return arr.length > 0;
}, "Can't be empty."];
var TangoSchema = new Schema({
title: { type: String, required: true },
sims: { type: [SimSchema], required: true, validate: notEmpty },
statements: { type: [StatementSchema], required: true, validate: notEmpty }
});
var SimSchema = new Schema({
name: { type: String, required: true, maxlength: 5 },
description: { type: String, required: true, maxlength: 140 }
});
var StatementSchema = new Schema({
text: { type: String, required: true },
children: { type: [StatementSchema], required: true, validate: notEmpty },
focus: { type: Boolean, required: true },
childrenHidden: { type: Boolean, required: true },
simId: { type: Number, required: true }
});
exports.TangoSchema = TangoSchema;
exports.SimSchema = SimSchema;
exports.StatementSchema = StatementSchema;
Следующий тест не пройден. Она возвращает вместо этого 200
из 400
:
it('Sim has no name', function(done) {
delete testTango.sims[0].name;
agent
.post('/tangos')
.send(testTango)
.expect(400)
.end(function(err, res) {
if (err) {
return done(err);
}
var result = JSON.parse(res.text);
assert(result.error);
assert.equal(result.error, 'Tango validation failed');
done();
})
;
});
Я ожидал, что так как объект танго, который был послан имеет Sim, который не соответствует SimSchema, он бы не был успешно создать танго. Вместо этого он создает Tango успешно и отправляет обратно 200
.
Почему это? Разве type: [SimSchema]
не сказал, что «это свойство должно быть массивом объектов, которые соответствуют SimSchema»?
Вы уверены, что ваши данные теста верны и что массив был опустошен? Я фактически не вижу ни одного случая, когда пользовательский валидатор будет вызываться, однако: 1. Обязательный атрибут родительской схемы вызовет ошибку для пустого или не существующего массива. 2. Подтверждение подсхемы будет выполняться, если элементы не совпадают с теми же необходимыми правилами. Я думаю, проблема здесь заключается в том, что вы пытаетесь манипулировать этим как объект JavaScript, когда он на самом деле является мангустским документом. Таким образом, вы не можете удалять вещи из массива, как вы пытаетесь сделать, и «изменений» просто не происходит. –
Я думаю, это может быть из-за того, что мои схемы определены. –