簡體   English   中英

ts-jest:導入 MockedObject 類型

[英]ts-jest: Import MockedObject type

如何將MockedObject類型MockedObject到我的測試文件中? 我的代碼示例如下

import { mocked, MockedObject } from 'ts-jest/utils';
import someFunction from '../src/common/someFunction';
import SomeClass from '../src/model/SomeClass';
import SomeInterface from '../src/interface/SomeInterface';

jest.mock('../src/model/SomeClass');

describe('run test', () => {
  let mockValidators: any;
  beforeAll(async () => {
    mockedValidators = (await someFunction()).map((v: SomeInterface) =>
      mocked(v)
    ):
  }
})

我試圖從 ts-jest/utils 導入MockedObject但 VSCode 找不到它。 我想用MockedObject<SomeInterface>替換any

錯誤:

模塊“../../../node_modules/ts-jest/utils”沒有導出成員“MockedObject”。

源代碼中,我們可以看到ts-jest/utils不導出MockedObject類型。 您可以從ts-jest/dist/util/testing.d.ts文件中復制類型,將它們添加到您的項目中。

例如

index.test.ts

import { mocked } from 'ts-jest/utils';

interface SomeInterface {
  validate(): boolean;
}
declare type MockableFunction = (...args: any[]) => any;
declare type MethodKeysOf<T> = {
  [K in keyof T]: T[K] extends MockableFunction ? K : never;
}[keyof T];
declare type PropertyKeysOf<T> = {
  [K in keyof T]: T[K] extends MockableFunction ? never : K;
}[keyof T];
declare type ArgumentsOf<T> = T extends (...args: infer A) => any ? A : never;
declare type ConstructorArgumentsOf<T> = T extends new (...args: infer A) => any ? A : never;
interface MockWithArgs<T extends MockableFunction> extends jest.MockInstance<ReturnType<T>, ArgumentsOf<T>> {
  new (...args: ConstructorArgumentsOf<T>): T;
  (...args: ArgumentsOf<T>): ReturnType<T>;
}
declare type MaybeMockedConstructor<T> = T extends new (...args: any[]) => infer R ? jest.MockInstance<R, ConstructorArgumentsOf<T>> : {};
declare type MockedFunction<T extends MockableFunction> = MockWithArgs<T> &
  {
    [K in keyof T]: T[K];
  };
declare type MockedObject<T> = MaybeMockedConstructor<T> &
  {
    [K in MethodKeysOf<T>]: T[K] extends MockableFunction ? MockedFunction<T[K]> : T[K];
  } &
  {
    [K in PropertyKeysOf<T>]: T[K];
  };

const UserValidator: SomeInterface = {
  validate: () => true,
};

async function someFunction() {
  return [UserValidator];
}

describe('run test', () => {
  let mockedValidators: Array<MockedObject<SomeInterface>>;
  beforeAll(async () => {
    mockedValidators = (await someFunction()).map((v: SomeInterface) => mocked(v));
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM