使用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
相关产品推荐
相关产品推荐

