在填充调用之后模拟Mongoose对象

我试图嘲笑填充调用,我想嘲笑返回mongoose对象,而不是普通的JS对象。

sandbox.mock(BookModel) .expects('populate') .yields(null, [ new BookModel({ _id: mongoose.Types.ObjectId(), name: 'Mock Book', authorIds: [{ name: 'Foo', }] }) ]); 

与模式:

 var BookSchema = new Schema({ name: { type: String, required: true, unique: true }, authorIds: [{type: Schema.Types.ObjectId, ref: 'Author'}], }); var AuthorSchema = new Schema({ name: { type: String, required: true, unique: true }, }); 

然而,mongoose正在阻止我的testing,创build一个模仿对象与模拟填充作者mongoose可能检查authorIds数组是一个对象的ID数组。

有没有人用sin子来嘲笑这样的人口稠密的领域?

一种方法是在创buildmongoose对象后在数组中插入一些东西。 数组的直接赋值也不起作用,所以你需要遍历多个项目。

 var book = new BookModel({ _id: mongoose.Types.ObjectId(), name: 'Mock Book', authorIds: [] }); book.authorIds[0] = { name: 'Foo' }; sandbox.mock(BookModel) .expects('populate') .yields(null, [book]);