我确实有一个具有 2 个重载方法的类。
public static create<M extends Model>(
this: ModelStatic<M>,
values?: M['_creationAttributes'],
options?: CreateOptions<M['_attributes']>
): Promise<M>;
public static create<M extends Model>(
this: ModelStatic<M>,
values: M['_creationAttributes'],
options: CreateOptions<M['_attributes']> & { returning: false }
): Promise<void>;
在我的单元测试中,我尝试使用 jest.spyOn
模拟第一种方法,但是开 Jest 只看到返回 Promise<void>
的方法.
const mockInsightCreate = jest.spyOn(Insight, "create");
mockInsightCreate.mockReturnValue(Promise.resolve()); // here I need to return an object of type - Insight
有没有办法指示spyOn
选择返回 Promise<M>
的第一个方法?
import {
Model,
} from "sequelize-typescript";
...
export default class Insight extends Model<Insight> {
最佳答案
我知道这个问题很老了,但下面是我对遇到同样问题但可能偶然发现的人的回答。
目前没有办法指示 spyOn
应该使用哪个重载签名。一种解决方案是将该值转换为 spyOn
期望的值。
mySpy.mockReturnValue(Promise.resolve(myObj) as unknown as void);
mySpy.mockResolveValue(myObj as unknown as void);
但是,我个人更喜欢尽可能避免强制输入系统。不需要任何输入柔道的另一种解决方法是模拟整个方法实现。
mySpy.mockImplementation(() => Promise.resolve(myObj));
关于reactjs - Jest SpyOn 选择正确的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68630707/