填充调用后模拟Mongoose对象

时间:2017-08-07 22:14:31

标签: node.js mongodb mongoose mocking sinon

我正在尝试模拟一个填充调用,我想模拟返回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来模拟像这样的人口稠密的领域?

1 个答案:

答案 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]);