농담 사용 시 스크립트 오류 입력
이전에 작성한 파일이 있습니다..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
'source' 카테고리의 다른 글
엑셀 스크롤을 중간 클릭 없이 원활하게 할 수 있나요? (0) | 2023.06.18 |
---|---|
Oracle 매개 변수 및 IN 절 (0) | 2023.06.18 |
Firebase.update 실패: 첫 번째 인수가 속성에 정의되지 않았습니다. (0) | 2023.06.13 |
정확히 파일이란 무엇입니까?플러시는? (0) | 2023.06.13 |
장고 ORM 쿼리에서 SQL ''LIKE''에 해당하는 것은 무엇입니까? (0) | 2023.06.13 |