【问题标题】:Mock Mongoose Objects after populate call在填充调用后模拟猫鼬对象
【发布时间】:2018-01-15 07:47:00
【问题描述】:

我正在尝试模拟 populate 调用,我想模拟返回 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 来模拟这样的填充字段?

【问题讨论】:

    标签: node.js mongodb mongoose mocking sinon


    【解决方案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]);
    

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2013-01-13
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 2014-11-25
      • 2014-07-24
      相关资源
      最近更新 更多