Typescript ожидает, что mockImplementation предоставит макеты для всех методов и свойств - PullRequest
2 голосов
/ 25 февраля 2020

Я использую typcript + jest и сталкиваюсь с некоторыми проблемами проверки типов при создании фиктивных реализаций. В качестве примера я хотел бы смоделировать объект Credentials из aws-sdk:

import { Credentials } from "aws-sdk";

jest.mock("aws-sdk");

const CredentialsMock = mocked(Credentials);

describe("Foo test", () => {
  beforeAll(() => {
    CredentialsMock.mockImplementation(() => { /*** <--- Type checking fails here ***/
      return {
        get: jest.fn()
      }
    });
  });
});

Проблема, с которой я столкнулся, заключается в том, что средство проверки типов хочет, чтобы я предоставлял макеты для каждого метода / свойство типа Credentials, когда я просто хочу смоделировать один метод. Указанная ошибка c:

TS2345: Аргумент типа '() => {get: jest.Mock; } 'нельзя назначить параметру типа' (accessKeyId: string, secretAccessKey: string, sessionToken ?: string | undefined) => учетные данные '.

Тип' {get: Mock; } 'отсутствуют следующие свойства из типа' Credentials ': getPromise, needsRefre sh, refre sh, refreshPromise и еще 5.

Есть ли способ сделать машинопись счастливой здесь?

1 Ответ

1 голос
/ 19 апреля 2020

Один способ, который я нашел, чтобы сделать машинописный текст счастливым, когда предоставлял имитацию имплементации, отличающуюся аргументами или возвращаемым значением от оригинала, - это оборачивать макетированный экземпляр в утверждение типа . Предполагая, что mocked(Credentials) в вашем примере возвращает jest.MockInstance, утверждение типа будет выглядеть так:

    (CredentialsMock as jest.MockInstance<any, any>).mockImplementation(() => {
      return {
        get: jest.fn()
      }
    });
...