Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 填充调用后的模拟猫鼬对象_Node.js_Mongodb_Mongoose_Mocking_Sinon - Fatal编程技术网

Node.js 填充调用后的模拟猫鼬对象

Node.js 填充调用后的模拟猫鼬对象,node.js,mongodb,mongoose,mocking,sinon,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', }] }) ]);

我试图模拟一个填充调用,我想模拟返回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来模拟这样的填充字段?

一种方法是在创建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]);