728x90
반응형

테스트에 대한 입문책이다. 혹시나 어떤 재밋는 개념을 얻을 수 있을까 하여 가볍게 읽게 되었다

 

expect.assertions

아래의 코드에서는 테스트 대상의 코드는 실행이 되지 않는다

wait(50)은 에러를 발생시키지 않으므로

이럴때는 expect.assertions를 사용하면 된다

test('지정 시간을 기다린 뒤 경과 시간과 함께 reject된다', async () => {
	try {
    	await wait(50)
    } catch (err) {
    	expect(err).toBe(50) // <- 테스트 대상
    }
});

 

 

아래처럼 지정하면 expect문이 실행이 안된채로 종료가 되어서 테스트는 실패한다

test('지정 시간을 기다린 뒤 경과 시간과 함께 reject된다', async () => {
    expect.assertions(1) // <- 단언문이 한 번 실행되는것을 기대한다
	try {
    	await wait(50)
    } catch (err) {
    	expect(err).toBe(50) // <- 테스트 대상
    }
});

 

위의 코드는 비동기 처리를 해야할때 추가하면 사소한 실수를 줄일 수 있다

 


stub과 spyon의 차이

stub은 목 객체다 / api 응답 대신 객체를 반환하는 것

spyon은 목 함수다 / 콜백 함수를 체크 할때 주로 사용하게 된다


현재 시각에 의존하는 테스트

=> 현재 시각을 고정할 수 있다

 

예전에 이런 고민을 한 적 있었는데 시간을 주입받는 방법으로 함수를 수정했었다

아래와 같은 로직들이 있는지 좀 더 찾아볼걸 그랬나보다

 

jest.useFakeTimers 

jest.setSystemTime

jest.useRealTimers

 

describe("greetByTime(", () => {
  beforeEach(() => {
  	jest.useFakeTimers();
  });
  
  afterEach(() => {
  	jest.useRealTimers();
  });
  
  test("아침에는 '좋은 아침입니다'를 반환한다", () => {
  	jest.setSystemTime(new Date(2023, 4, 23, 8, 0, 0));
    expect(greetByTime()).toBe('좋은 아침입니다');
  });
});
728x90
반응형

+ Recent posts