我有一个类,它有两个重载的方法。
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> {
型
2条答案
按热度按时间f45qwnt81#
我知道这个问题已经很老了,但贝娄是我对任何可能遇到同样问题的人的回答。
目前还没有办法指示
spyOn
应该使用哪个重载签名。一个解决方案是将值转换为spyOn
期望的任何值。字符串
然而,我个人倾向于尽可能避免强制类型化系统。另一个不需要任何类型化的解决方法是模拟整个方法实现。
型
x33g5p2x2#
因为你似乎不能选择要模拟哪个重载,所以在你的例子中,可以使用spread运算符来模拟任何同名函数。我在
node-ipc
库中用connectToNet
成功地做到了这一点,它有几个重载。在我的例子中,我想执行回调函数。字符串
以下是重载定义:
型
我可以模拟最后一个,但我没有测试相同的
spyOn
是否也模拟了其他两个重载。