首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ts-jest:导入MockedObject类型

ts-jest:导入MockedObject类型
EN

Stack Overflow用户
提问于 2020-10-29 02:30:11
回答 2查看 715关注 0票数 0

如何将MockedObject类型导入测试文件?我的代码示例如下

代码语言:javascript
复制
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找不到它。我想用any代替MockedObject<SomeInterface>

错误:

模块‘./.././节点_模块/ts-jest/utils“’没有导出成员'MockedObject‘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-29 03:09:20

源代码中,我们可以看到ts-jest/utils不导出MockedObject类型。您可以从ts-jest/dist/util/testing.d.ts文件中复制类型,并将它们添加到项目中。

例如。

index.test.ts

代码语言:javascript
复制
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));
  });
});
票数 -1
EN

Stack Overflow用户

发布于 2022-10-23 14:36:51

现在可以访问ts-jest类型(使用26.5.5版本进行测试)(因为功能合并了)。

参见此示例:

代码语言:javascript
复制
import { mocked } from 'ts-jest/utils';
import { MockedObject } from 'ts-jest/dist/utils/testing';

let myMock: MockedObject<SomeInterface>;
...
myMock = mocked(new SomeClass());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64584113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档