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

使用Jest模拟Supabase链式调用.eq().eq()时出现函数不存在错误

解决Jest模拟Supabase链式调用多eq报错问题

你的问题出在模拟Supabase链式调用的方式上——当前写法是硬编码了两次eq的嵌套结构,第一个eq只返回包含第二个eq的对象,第二个eq才返回带single的对象。但实际Supabase的API中,每个eq调用后都会返回一个包含所有链式方法(包括eq、single)的查询实例,这种硬编码方式只能适配固定次数的eq调用,多一次就会报错。

直接改用mockReturnThis()实现通用的链式调用模拟,不管调用多少次eq都能正常工作:

const mockSingle = jest.fn().mockResolvedValueOnce({ data: { someData: [someData] }, error: null });

// 创建可链式调用的模拟查询对象
const mockQuery = {
  select: jest.fn().mockReturnThis(),
  eq: jest.fn().mockReturnThis(),
  single: mockSingle
};

jest.mock("@supabase/supabase-js", () => ({
  createClient: jest.fn().mockReturnValue({
    from: jest.fn().mockReturnValue(mockQuery)
  })
}));

代码说明:

  • mockReturnThis()会让每个方法调用后返回对象自身,这样from()返回mockQuery,select()返回mockQuery,每次eq()调用也返回mockQuery,最后调用single()就会触发你预设的mockSingle。
  • 这种写法完全贴合Supabase实际的链式调用逻辑,不管你加多少次eq或者其他链式方法(比如gt、like),都不会再出现方法不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:44:56