Схема тестирования Mocha с .validate () не возвращает - PullRequest
0 голосов
/ 10 июня 2018

В настоящее время я пытаюсь написать несколько тестов схемы, и у меня есть следующая схема:

const ItemSchema = mongoose.Schema({
  _id : mongoose.Schema.Types.ObjectId,
  price : {type : Number},
  name : {type : String, required : true, trim : true},
  urlPath : {type : String, required : true, unique : true, trim : true},
  creationDate   : {type : Date, default : Date.now},
  lastModDate : {type : Date, default : Date.now},
}, {
  toJSON: { virtuals: true }
});

Необходимы свойства urlPath и name.

Мой тестовый файлвыглядит следующим образом:

 describe('validation', () => {
    it('should be invalid if name is missing', function(done){
      let item = new Item({urlPath : "item-1-urlPath"});
      item.validate(function(err){
        if(!err) done('should not be here');
        expect(err.name).to.eql('ValidationError');
        expect(err.errors).to.have.property('name');
        done();
      });
    })
  })

Я всегда получаю эту ошибку:

Превышено время ожидания 2000 мс.Для асинхронных тестов и хуков убедитесь, что вызывается «done ()»;если вы возвращаете обещание, убедитесь, что оно разрешено.

, но когда я проверяю пропущенный urlPath, как это:

let item = new Item({name : "item-1"});

все выглядит нормально

ОБНОВЛЕНИЕ

промежуточное программное обеспечение, которое я использую (описание в ответе)

ItemSchema.pre('validate', async function() {
  var item    = this;
  let urlPath = item.urlPath;
  // only if it has been modified (or is new)
  if (!item.isModified('urlPath')) return Promise.resolve();
  urlPath = await [HERE_I_AM_CALLING_A_PROMISE_FUNCTION]
  item.urlPath = urlPath;
});
  • nodejs: 8.1.1
  • mongoose: 5.1.3
  • машинопись: 2.9.1
  • система: ubuntu 16.04

1 Ответ

0 голосов
/ 11 июня 2018

проблема возникла из-за промежуточного программного обеспечения, которое я обновил в описании. Это промежуточное программное обеспечение вызывает асинхронный вызов базы данных, в результате чего я просто тестирую схему и не могу запросить базу данных без подключения.

Я думаю, что это произошло из-за ошибки подключения, для которой требуется более 2 секунд.

...