用嵌套对象编写测试时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

回到顶部