사용 jest.spyOn()
하고 spy.mockRestore()
.
const spy = jest.spyOn(console, 'warn').mockImplementation();
...
spy.mockRestore();
허용 된 답변은 원본을 복원하지 않으며 console.warn()
동일한 파일 내의 다른 테스트를 "타협"합니다 ( console.warn()
다른 테스트 또는 테스트중인 코드에서 사용되는 경우 ).
참고 console.warn = jest.fn()
로 테스트 파일에서 사용 하는 경우 다른 테스트 파일에 영향을주지 않습니다 (예 : console.warn은 다른 테스트 파일의 원래 값으로 돌아갑니다).
조언 : 당신이 호출 할 수있는 spy.mockRestore()
내부 afterEach()
/ afterAll()
테스트가 충돌하더라도 동일한 파일에서 다른 시험을 손상하지 않습니다 있는지 확인하기 위해 (예를 보장하는 동일한 파일 내부의 테스트가 완전히 분리된다).
전체 예 :
const spy = jest.spyOn(console, 'warn').mockImplementation();
console.warn('message1');
console.warn('message2');
expect(console.warn).toHaveBeenCalledTimes(2);
expect(spy).toHaveBeenCalledTimes(2);
expect(console.warn).toHaveBeenLastCalledWith('message2');
expect(spy).toHaveBeenLastCalledWith('message2');
expect(spy.mock.calls).toEqual([['message1'], ['message2']]);
expect(console.warn.mock.calls).toEqual([['message1'], ['message2']]);
spy.mockRestore();
console.warn('message3');
expect(spy).toHaveBeenCalledTimes(0);
expect(spy.mock.calls).toEqual([]);
쓸 수 없습니다
console.warn = jest.fn().mockImplementation();
...
console.warn.mockRestore();
원본을 복원하지 않기 때문입니다 console.warn()
.
/! \와 함께 mockImplementationOnce()
전화해야합니다 spy.mockRestore()
.
const spy = jest.spyOn(console, 'warn').mockImplementationOnce(() => {});
console.warn('message1');
expect(console.warn).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledTimes(1);
expect(console.warn).toHaveBeenLastCalledWith('message1');
expect(spy).toHaveBeenLastCalledWith('message1');
expect(spy.mock.calls).toEqual([['message1']]);
expect(console.warn.mock.calls).toEqual([['message1']]);
console.warn('message2');
expect(console.warn).toHaveBeenCalledTimes(2);
expect(spy.mock.calls).toEqual([['message1'], ['message2']]);
expect(console.warn.mock.calls).toEqual([['message1'], ['message2']]);
spy.mockRestore();
console.warn('message3');
expect(spy).toHaveBeenCalledTimes(0);
expect(spy.mock.calls).toEqual([]);
다음과 같이 작성할 수도 있습니다.
const assert = console.assert;
console.assert = jest.fn();
...
console.assert = assert;