我正在尝试模拟一个填充调用,我想模拟返回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阻止我的测试使用模拟填充的作者创建模拟对象,因为mongoose可能正在检查authorIds数组是否为对象ID数组。
有没有人用sinon来模拟像这样的人口稠密的领域?
答案 0 :(得分:1)
一种方法是在创建mongoose对象后在数组中插入一些东西。直接分配数组也不起作用,因此您需要遍历多个项目。
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]);