reactjs - Jest SpyOn 选择正确的重载

标签 reactjs typescript jestjs sequelize.js

我确实有一个具有 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/

相关文章:

javascript - 如何使用 Jest 测试忽略导入语句?

unit-testing - 开 Jest mock 引用错误

javascript - React 功能组件 vs 经典组件

typescript - ngOnChange 不存储 previousValue 属性

javascript - 并行执行多个 promise ,但只从其中一个中检索结果

javascript - 如何使用 jest 和 React-testing-library 测试某个元素是否不存在?

reactjs - React 项目 - 节点模块中的展开运算符意外标记

reactjs - 如何在 React 中动态添加组件到列表而不需要冗余渲染?

javascript - 在 react-native 中避免相对路径导入 hell ?

javascript - Angular 与 TypeScript : Unexpected behavior in contenteditable <td> element in HTML <table> with (blur) upon first text entry