Ошибка проверки Mogoose при написании теста с вложенными объектами

Я пишу небольшое приложение, которое использует javascript, node, mongoDB и mongoose. У меня две коллекции; пользователи и группы, где каждая группа содержит массив пользователей

Пользователь: {_ id: {type: String, required: true} FirstName: {type: String, required: true}, ..}

Группа {_id: {type: String, required: true}, users: [{user: userSchema}]}

Я пишу модульный тест api с использованием Mocha и Superagent. Когда я вставляю образец документа для группы, которая включает вложенные объекты для пользователей, у меня возникает ошибка проверки?

Не могли бы вы сообщить мне, что не так с этим примером?

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

person Student    schedule 18.12.2017    source источник


Ответы (1)


Я думаю, что ваше 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'}} },
  ];
person Zilvinas    schedule 18.12.2017
comment
Большое спасибо, это изменение сработало. ИЛИ просто: пользователи: [User.userSchema]. - person Student; 18.12.2017