Как сильно печатать шутки - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы сильно напечатать мои шутки.В определенной степени я могу заставить его работать, но когда у класса есть личные свойства, я застреваю.

Дополнительный вопрос, когда я использую mocks (как я в настоящее время делаю), тип возвращаемого значения имеет оригинальный типно когда мне нужно получить доступ к любому методу, добавленному Jest, я должен ввести его так, чтобы jest.Mock получил доступ к методу.Есть лучший способ сделать это?Я пытался работать с jest.Mock, jest.Mocked, jest.MockInstance.

Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово!

class MyTest {
    constructor(private readonly msg: string) {}

    public foo(): string {
        return this.msg;
    }
}

const myTestMock: jest.Mock<MyTest, [string]> = jest.fn<MyTest, [string]>(() => ({
    msg: 'private',
    foo: jest.fn().mockReturnValue('aaa'),
}));
// Results in error:
// Type '{ msg: string; foo: Mock<any, any>; }' is not assignable to type 'MyTest'.
// Property 'msg' is private in type 'MyTest' but not in type '{ msg: string; foo: Mock<any, any>; }'

const myTestMockInstance: MyTest = new myTestMock('a');
console.log(myTestMockInstance.foo()); // --> aaa

// Accessing jest mock methods:
(<jest.Mock>myTestMockInstance).mockClear(); // <-- can this be done without type casting

Грязный обходной путь:

const myTestMock: jest.Mock<MyTest, [string]> = jest.fn<MyTest, [string]>(
    // Cast to any to satisfy TS
    (): any => ({
        msg: 'private',
        foo: jest.fn().mockReturnValue('aaa'),
    })
);
...