You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何Mock MongoDB原生驱动中find()方法的toArray()?

如何Mock MongoDB的find().toArray()方法

没问题,我来帮你搞定这个Mock的问题!

因为MongoDB的find()方法返回的不是直接的Promise,而是一个游标(cursor)对象,toArray()是这个游标对象上的方法,它才会返回最终的Promise。所以不能像MockfindOne那样直接让find()返回Promise,得换个思路:先Mockfind()返回一个模拟的游标对象,再给这个对象加上我们Mock好的toArray()方法。

具体实现步骤

在你的content.test.js里,这样设置Mock:

// Mock Content.find 方法,返回一个带有toArray的模拟游标对象
Content.find = jest.fn(() => ({
  // 让toArray返回一个resolved的Promise,包含你需要的模拟posts数据
  toArray: jest.fn(() => Promise.resolve([
    { _id: '1', title: 'First Post', category: 'foo' },
    { _id: '2', title: 'Second Post', category: 'foo' }
  ]))
}));

这样当你的代码执行const posts = await Content.find({ category: 'foo' }).toArray()时,posts就会是你模拟的数组数据了。

验证调用情况(可选)

如果你需要验证代码是否正确调用了find和toArray,可以在测试用例里添加这些断言:

// 验证find方法是否传入了正确的查询条件
expect(Content.find).toHaveBeenCalledWith({ category: 'foo' });
// 验证toArray方法是否被调用
expect(Content.find().toArray).toHaveBeenCalled();

多测试用例的Mock重置

如果有多个测试用例,为了避免Mock的状态污染,建议在beforeEach钩子中重置Mock:

beforeEach(() => {
  // 清空所有Mock的调用记录
  jest.clearAllMocks();
  // 重新设置find的Mock返回值
  Content.find.mockReturnValue({
    toArray: jest.fn(() => Promise.resolve([{ title: 'Mock Post', category: 'foo' }]))
  });
});

内容的提问来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:47:19