jest.isolateModules() 를 사용하여 모듈의 동작을 테스트 케이스에 갇을 수 있습니다.
소개
jest.isolateModules(fn) 을 사용하면 모듈 동작을 테스트 케이스에 갇혀 각 테스트마다 독립적인 테스트를 수행할 수 있습니다.
사용소로서는, process.env
의 값에 의해 행동이 바뀌는 모듈의 테스트등으로 편리합니다.
샘플로서, jest로 현재 시간 고정 로 사용한 Date
오브젝트가 테스트 케이스내에서 고유의 것이 되도록(듯이) 해 봅시다. 1 2
사용법
const moment = require('moment')
// 固定したい時間
const MOCKED_TIME = '2019/8/1 12:00:00';
describe('モックした現在時刻のテスト', () => {
// setup
const OriginalDate = Date; // 退避
const now = new OriginalDate(MOCKED_TIME);
beforeEach(()=> {
// 各テストケースの中では固有のDateにする
jest.isolateModules(() => {
// Date.now() と new Date() のみmocking
Date.now = jest.fn().mockReturnValue(now.valueOf());
jest.spyOn(global, 'Date').mockImplementation((arg) => {
if (arg === 0 || arg) {
return new OriginalDate(arg);
}
return now;
});
});
});
afterAll(() => {
jest.restoreAllMocks();
});
test('現在時刻をYYYY/MM/DDの形式で表示できる', () => {
const actual = moment().format('YYYY/MM/DD');
expect(actual).toBe('2019/08/01');
});
test('Dateコンストラクタで現在時刻が固定化される', () => {
const actual = new Date();
expect(actual.valueOf()).toBe(now.valueOf());
});
test('Dateコンストラクタで時刻を指定できる', () => {
const actual = new Date(0);
expect(actual.valueOf()).toBe(0);
});
})
describe('現在時刻がモックオブジェクトになっていないことのテスト', () => {
test(`現在時刻は${MOCKED_TIME}ではない`, () => {
const now = new Date();
expect(now).not.toBe(new Date(MOCKED_TIME));
expect(moment(now).format('YYYY/MM/DD HH:mm:ss')).not.toBe(MOCKED_TIME);
});
})
jest.spyOn
에서 만든 모의는 restoreAllMocks
에서 원래 되돌릴 수 없다 하지만 시험 종료 후 mockFn.mockRestore() 을 부르게 하면 이 샘플과 같은 것이 가능합니다.
코드 ↩ htps : // 기주 b. 코 m / 료 rm / 치 L / t 리에 / 마 s r / ㅈ st / 001
Reference
이 문제에 관하여(jest.isolateModules() 를 사용하여 모듈의 동작을 테스트 케이스에 갇을 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bearII/items/9e9204215060187b4c05
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const moment = require('moment')
// 固定したい時間
const MOCKED_TIME = '2019/8/1 12:00:00';
describe('モックした現在時刻のテスト', () => {
// setup
const OriginalDate = Date; // 退避
const now = new OriginalDate(MOCKED_TIME);
beforeEach(()=> {
// 各テストケースの中では固有のDateにする
jest.isolateModules(() => {
// Date.now() と new Date() のみmocking
Date.now = jest.fn().mockReturnValue(now.valueOf());
jest.spyOn(global, 'Date').mockImplementation((arg) => {
if (arg === 0 || arg) {
return new OriginalDate(arg);
}
return now;
});
});
});
afterAll(() => {
jest.restoreAllMocks();
});
test('現在時刻をYYYY/MM/DDの形式で表示できる', () => {
const actual = moment().format('YYYY/MM/DD');
expect(actual).toBe('2019/08/01');
});
test('Dateコンストラクタで現在時刻が固定化される', () => {
const actual = new Date();
expect(actual.valueOf()).toBe(now.valueOf());
});
test('Dateコンストラクタで時刻を指定できる', () => {
const actual = new Date(0);
expect(actual.valueOf()).toBe(0);
});
})
describe('現在時刻がモックオブジェクトになっていないことのテスト', () => {
test(`現在時刻は${MOCKED_TIME}ではない`, () => {
const now = new Date();
expect(now).not.toBe(new Date(MOCKED_TIME));
expect(moment(now).format('YYYY/MM/DD HH:mm:ss')).not.toBe(MOCKED_TIME);
});
})
jest.spyOn
에서 만든 모의는 restoreAllMocks
에서 원래 되돌릴 수 없다 하지만 시험 종료 후 mockFn.mockRestore() 을 부르게 하면 이 샘플과 같은 것이 가능합니다.코드 ↩ htps : // 기주 b. 코 m / 료 rm / 치 L / t 리에 / 마 s r / ㅈ st / 001
Reference
이 문제에 관하여(jest.isolateModules() 를 사용하여 모듈의 동작을 테스트 케이스에 갇을 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bearII/items/9e9204215060187b4c05텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)