2014-10-24 2 views
2

Я прочитал другие проблемы/ответы, которые у людей есть с ключом версии, но почему-то я не понимаю, почему это происходит конкретно в моем случае.VersionError: Совпадающий документ не найден Ошибка только на (Mocha) test

Так что у меня следующий тест мокко:

it('should be able to save one job', function (done) { 

     Promise.join(user.saveAsync(), company.saveAsync(), 
      function (savedUser, savedCompany) { 
       user = savedUser[0]; 
       user.jobs.push(job); 
       user.saveAsync() 
        .spread(function (savedUserWithJob) { 
         user = savedUserWithJob; 
         user.jobs.should.have.length(1); 
         done(); 
        }) 
       .catch(function (err) { 
        done(err); 
       }); 
     }); 

    }); 

что все хорошо и проходит. У меня не было других проблем даже во время работы.

Теперь, когда я пытаюсь запустить тот же тест сразу после первой именно:

it('should be able to save one job', function (done) { 
     ..... 
    }); 

    it('should be able to save one job again', function (done) { 
     ..... 
    }); 

Второй завершается с ошибкой:

VersionError: No matching document found.

Я действительно не понимаю, почему это происходит, поскольку я уже нажимаю на массив в первый раз без проблем с версированием. Почему он не работает второй раз подряд?

ответ

1

Mongoose versionKey сохраняет номер версии на документе, обычно называемый __v.

Это значение атомарно увеличивается, если модификация массива потенциально меняет положение элементов массива. Это значение также отправляется в предложении where для любых обновлений, для которых требуется использование позиционной нотации. Если наше предложение where по-прежнему совпадает с документом, это гарантирует, что никакие другие операции не изменили положение элементов массива, и вполне нормально использовать синтаксис позиционного позиционирования. (read more here)

В своих тестах, после первого save(), док имеет инкрементируется __v, который должен быть обновлен на ваш документ, который будет использоваться мангуста в рамках where clause на второй save().

Смежные вопросы