В настоящее время я пытаюсь написать несколько тестов схемы, и у меня есть следующая схема:
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