Jest에서 전역을 조롱하는 몇 가지 방법이 있습니다.
- 사용
mockImplementation
방법 (방법과 같은 대부분의 농담)하지만에서 제공하는 몇 가지 기본 구현이 그 변수에만 작동합니다은 jsdom
, window.open
그들 중 하나입니다 :
test('it works', () => {
const mockedOpen = jest.fn();
const originalWindow = { ...window };
const windowSpy = jest.spyOn(global, "window", "get");
windowSpy.mockImplementation(() => ({
...originalWindow,
open: mockedOpen
}));
statementService.openStatementsReport(111)
expect(mockedOpen).toBeCalled();
windowSpy.mockRestore();
});
- 값을 전역 속성에 직접 할당하십시오. 가장 간단하지만 일부
window
변수에 대해 오류 메시지를 트리거 할 수 있습니다 window.href
.
test('it works', () => {
const mockedOpen = jest.fn();
const originalOpen = window.open;
window.open = mockedOpen;
statementService.openStatementsReport(111)
expect(mockedOpen).toBeCalled();
window.open = originalOpen;
});
- 전역을 직접 사용하지 마십시오 (약간의 리팩토링 필요).
전역 값을 직접 사용하는 대신 다른 파일에서 가져 오는 것이 더 깔끔 할 수 있으므로 Jest에서는 조롱이 사소 해졌습니다.
./test.js
jest.mock('./fileWithGlobalValueExported.js');
import { windowOpen } from './fileWithGlobalValueExported.js';
import { statementService } from './testedFile.js';
test('it works', () => {
statementService.openStatementsReport(111)
expect(windowOpen).toBeCalled();
});
./fileWithGlobalValueExported.js
export const windowOpen = window.open;
./testedFile.js
import { windowOpen } from './fileWithGlobalValueExported.js';
export const statementService = {
openStatementsReport(contactIds) {
windowOpen(`a_url_${contactIds}`);
}
}