mongoose 使用筛选器和回调查找

3duebb1j  于 2023-01-17  发布在  Go
关注(0)|答案(1)|浏览(125)

我可以嘲笑find的版本

Model.find({'a': 'b'}).then(value => {
///whatever
}).catch(err => whatever.else());

开玩笑地说:

Educator.find = jest.fn().mockResolvedValue({'hi': 'its me'});

然后,当调用find时,promise按预期解析。Model. find有另一种语法传递回调(而不是使用返回的promise),例如:

Model.find({'a': 'b'}, (err: any, value: IModel) => {
  if (err) {
    // whatever error handling
  }
  // whatever you want with the result
});

我试过了

Model.find = jest.fn((conditions, callback) => {callback(null, {'oi': 'its a me'})})

但是我得到了一个错误"Type 'void' is not assignable to type 'Query〈any,any,{},IModel〉'"-所以它认为我试图模仿find的版本,定义如下:

find<ResultDoc = HydratedDocument<T, TMethodsAndOverrides, TVirtuals>>(
      filter: FilterQuery<T>,
      projection?: ProjectionType<T> | null | undefined,
      options?: QueryOptions<T> | null | undefined,
      callback?: Callback<ResultDoc[]> | undefined
    ): QueryWithHelpers<Array<ResultDoc>, ResultDoc, TQueryHelpers, T>;

但我真的想要这个:

find<ResultDoc = HydratedDocument<T, TMethodsAndOverrides, TVirtuals>>(
      filter: FilterQuery<T>,
      callback?: Callback<ResultDoc[]> | undefined
    ): QueryWithHelpers<Array<ResultDoc>, ResultDoc, TQueryHelpers, T>;

希望我的要求有道理。我想知道怎么才能正确地嘲笑它。

7xllpg7q

7xllpg7q1#

回答我自己的问题...
这按预期工作

Model.find = jest.fn((conditions, callback) => {
      if (callback) callback(null, {'oi': 'its a me'});
      return new Query<any, any, {}, IModel>();
    });

我敢打赌有一个更干净的方式虽然-仍然很想知道!

相关问题