【问题标题】:ts-jest: Import MockedObject typets-jest:导入 MockedObject 类型
【发布时间】:2020-10-30 14:29:43
【问题描述】:

如何将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'。

【问题讨论】:

    标签: typescript unit-testing jestjs ts-jest


    【解决方案1】:

    source code,我们可以看到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));
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 1970-01-01
      • 2019-08-30
      • 2018-03-20
      • 1970-01-01
      • 2020-10-24
      • 2022-07-15
      • 1970-01-01
      • 2019-01-18
      相关资源
      最近更新 更多