用嵌套对象编写测试时Mogoose验证错误
我正在编写一个使用javascript,node,mongoDB和mongoose的小应用程序。我有两个集合;用户和组,其中每个组包含用户用嵌套对象编写测试时Mogoose验证错误
用户的数组:{_ ID:{类型:字符串,必需:真}姓:{类型:字符串,必需:真},..}
组{ _id:{type:String,required:true},users:[{user:userSchema}]}
我正在使用Mocha和Superagent编写api单元测试。当我为包含用户的嵌套对象的组插入示例文档时,出现验证错误?
您能否让我知道这个例子出了什么问题?
var userSchema = {
_id: {
type: String,
required: true,
},
profile: {
firstName: {
type: String,
required: true
},
lastName: {
type: String,
required: true
}
};
var GroupSchema =
{
_id: {
type: String,
required: true
},
users:[{
user: User.userSchema
}]
};
it('can query group by id', function(done) {
var users = [
{ _id: 'az', profile: {firstName: 'a', lastName: 'z'}},
{ _id: 'bz', profile: {firstName: 'b', lastName: 'z'}},
];
User.create(users, function(error, users) {
assert.ifError(error);
Group.create({ _id: 'ab', users: [{ _id: 'az', profile: {firstName: 'a', lastName: 'z'}}, { _id: 'bz', profile: {firstName: 'b', lastName: 'z'}}] }, function(error, doc) {
assert.ifError(error);
var url = URL_ROOT + '/api/groups/id/ab';
superagent.get(url, function(error, res) {
assert.ifError(error);
var result;
assert.doesNotThrow(function() {
result = JSON.parse(res.text);
});
assert.ok(result.group);
assert.equal(result.group._id, 'ab');
done();
});
});
});
});
错误消息:
Uncaught ValidationError: ChatGroup validation failed: users.1._id: Cast to ObjectID failed for value "bz" at path "_id", users.0._id: Cast to ObjectID failed for value "az" at path "_id", users.0.user.profile.lastName: Path `user.profile.lastName` is required., users.0.user.profile.firstName: Path `user.profile.firstName` is required., users.0.user._id: Path `user._id` is required., users.1.user.profile.lastName: Path `user.profile.lastName` is required., users.1.user.profile.firstName: Path `user.profile.firstName` is
回答:
我觉得你GroupSchema
定义是不正确的:
var GroupSchema = {
_id: {
type: String,
required: true
},
users:[{
user: User.userSchema
}]
};
你使用它在测试users
阵列应该有User.userSchema
数组类型的方法:
var GroupSchema = {
_id: {
type: String,
required: true
},
users:[{
type: User.userSchema // type, not 'user'
}]
// OR just: users: [User.userSchema]
};
否则,如果你仍然需要使用你原来的模式,那么在您的测试,你应该使用这种方式:
var users = [ { user: { _id: 'az', profile: {firstName: 'a', lastName: 'z'}} },
{ user: { _id: 'bz', profile: {firstName: 'b', lastName: 'z'}} },
];
以上是 用嵌套对象编写测试时Mogoose验证错误 的全部内容, 来源链接: utcz.com/qa/262534.html