source

농담 사용 시 스크립트 오류 입력

nicesource 2023. 6. 13. 22:25
반응형

농담 사용 시 스크립트 오류 입력

이전에 작성한 파일이 있습니다..js우리의 기능 중 일부를 속이는 파일은 다음을 위해.jest시험 목적나는 그것을 a로 옮길 것입니다..ts파일:

서버.ts

const Server = jest.genMockFromModule('../Server');

Server.getAsync = Server.default.getAsync;
// other REST-ful functions here

export default Server;

다음 오류가 발생했습니다.

'getAsync' 속성이 '{}' 유형에 없습니다.

'default' 속성이 '{}' 유형에 없습니다.

그런 다음 해당 테스트 파일에서 다음 작업을 수행합니다.

My Component.test.ts

import Server from 'path/to/Server';

jest.mock('path/to/Server');

const dispatchMock = jest.fn();
const getStateMock = jest.fn();

describe('MyComponent.someFunction', () => {
    beforeEach(() => {
        jest.resetAllMocks();
    });

    it('Does the right stuff', () => {
        Server.getAsync.mockReturnValueOnce(Promise.resolve([{ key: 'value' }]));
        dispatchMock.mockImplementationOnce((promise) => promise);
        dispatchMock.mockImplementationOnce();

        return someFunction()(dispatchMock)
            .then(() => {
                expect(Server.getAsync).toHaveBeenCalledTimes(1);
                expect(Server.getAsync.mock.calls[0][0]).toBe('something');
            });
    });
});

오류가 발생합니다.dispatchMock.mockImplementationOnce()

1개의 인수가 필요하지만 0. (메소드) 농담을 받았습니다.MockInstance<{}}>mockImplementOnce(fn: (...args: any[]) => any): joke.모의 <{}>

...온Server.getAsync.mockReturnValueOnce

'mockReturnValueOnce' 속성이 '(url: string, baseRoute?) 유형에 없습니다.string | null입니다. 제너레이터를 로드하시겠습니까?(isLoading: boolean) => {type: strin...'

...등Server.getAsync.mock

속성 'mock'이(가) 유형 '(url: string, baseRoute?string | null입니다. 제너레이터를 로드하시겠습니까?(isLoading: boolean) => {type: strin...'

제가 한동안 이 일로 머리를 쥐어박았으니 어떤 도움이라도 주시면 감사하겠습니다.

갱신하다

네, 제가 추가했습니다.as any내 첫 줄 끝까지Server.ts다음과 같이 파일을 작성합니다.

const Server = jest.genMockFromModule('../Server') as any;

그것은 첫 번째 오류들을 없앴습니다.여전히 나의 오류에 직면하고 있습니다..test.ts서류철로 작성합니다.

업데이트 2

저는 실제 농담 테스트를 실행할 때 유형 오류가 있음에도 불구하고 모두 통과한다는 것을 알게 되었습니다.이러한 문제는 실제 테스트와 관련이 없는 것으로 보입니다.

제가 직접 고쳤습니다.제가 그것을 일하게 한 방법은 어떤 전화라도 거는 것이었습니다.Server.getAsync특정한 농담 모의 유형으로.

let getAsyncMock = Server.getAsync as jest.Mock

또는

let getAsyncMock = <jest.Mock>(Server.getAsync)

이렇게 하면 제 실수가 없어집니다.

@nobleare 응답에 이어...좋은 업데이트는 모의 구현을 포장하는 것입니다.beforeAll그리고 그것을 그 안으로 치웁니다.beforeEach블록:

import { AnalyticsApi } from "../../api/src";

jest.mock("../../api/src");

describe('...', () => {

  beforeAll(() => {
    (AnalyticsApi as jest.Mock<AnalyticsApi>).mockImplementation(() => ({
      listPolicies: jest.fn().mockResolvedValue('promiseValue')
    }));
  });

  beforeEach(() => {
    (AnalyticsApi as jest.Mock<AnalyticsApi>).mockClear();
  });

});

사용

import { mocked } from 'ts-jest/utils';
import { foo } from './foo';
jest.mock('./foo');


expect(mocked(foo)).toHaveLength(1);

가져오기를 재정의하려면 다음과 같이 수행할 수 있습니다.

import { AnalyticsApi } from "../../api/src";

jest.mock("../../api/src");

let listPolicies = jest.fn(() => {
  return Promise.resolve();
});

(AnalyticsApi as jest.Mock<AnalyticsApi>).mockImplementation(() => ({
  listPolicies,
}));

우선, 당신은 사용하고 있습니다.genMockFromModule그것은 당신의 조롱을 만듭니다.Server그래서 전화할 필요가 없습니다.jest.mock('path/to/Server');.

둘째, 당신은 무엇을 성취하기 위해 노력하고 있습니까?Server.getAsync = Server.default.getAsync;그것은 단지 움직이는 것뿐입니다.getAsync필요 없는 수준으로 말입니다.그냥 전화하셔도 됩니다.jest.genMockFromModule('../Server').default;;

dispatchMock.mockImplementationOnce()여기서는 약속을 전달해야 한다고 말했기 때문에 오류를 던지는 것입니다.dispatchMock.mockImplementationOnce((promise) => promise);

위해서Server.getAsync.mockReturnValueOnce그리고.Server.getAsync.mock실제로 사용하고자 하는 경우mocked다른 답들이 제시하는 것처럼 유형을 캐스팅하는 대신.

예:mocked(Server.getAsync).mockReturnValueOnce()

언급URL : https://stackoverflow.com/questions/51215750/typescript-errors-when-using-jest-mocks

반응형