代码之家  ›  专栏  ›  技术社区  ›  DaveJohnston

如何使用jest和typescript创建mock对象

  •  -1
  • DaveJohnston  · 技术社区  · 2 年前

    我正在写一个笑话测试,我想模拟一个服务,根据它的接口返回正确类型的对象。要返回的对象类型有一个复杂的构造函数,它需要大量的工作来创建并保持typescript的正确性。实现这一点的最佳/最简单的方法是什么(下面的代码示例)

    import Auth, { CognitoUser } from '@aws-amplify/auth';
    
    jest.mock('@aws-amplify/auth');
    const mockedAuth = Auth as jest.Mocked<typeof Auth>;
    
    const loggedInUser = new CognitoUser(); \\ Expected 1 arguments, but got 0.
    mockedAuth.signIn.mockResolvedValue(loggedInUser);
    

    在上面的代码中,测试将运行并创建CognitoUser的一个实例,其中所有函数都被截断,但TypeScript抱怨我没有传递所需的参数。有没有一种方法可以让它快乐而不添加@ts-ignore?

    注意:构造函数所期望的参数是ICognitoUserData类型,它本身具有深入到许多级别的必需字段。

    0 回复  |  直到 2 年前
        1
  •  0
  •   DaveJohnston    2 年前

    对于其他遇到这个问题并想要答案的人来说,我能得到的最好的答案是:

    const loggedInUser = new CognitoUser({} as ICognitoUserData);

    在测试中将对象强制转换为所需类型似乎是完全可以接受的。