공식문서를 보고 그때그때 필요한 문법을 찾아 예제를 적으며 공부합니다.
expect()
expect(값).toBe(비교할 값)
- Object.is(값, 비교할 값) 과 같다
- Object.is() 란?
Object.is === 양쪽의 타입이 다를 경우 false false -0과 +0 false true Number.NaN과 NaN true false NaN과 0/0 true false 객체 비교 참조 비교 참조 비교
expect(calculator.sum()).toBe(6);
expect(객체).toEqual(비교할 객체)
toBe는 객체의 참조값을 비교하지만, toEqual은 모든 필드를 순회하며 값을 비교한다.
test("object assignment", () => {
const data = { one: 1 };
data.two = 2;
expect(data).toEqual({ one: 1, two: 2 }); // pass
});
test("object assignment", () => {
const data = { one: 1 };
data.two = 2;
expect(data).toBe({ one: 1, two: 2 }); // fail
});
expect(모의함수).toHaveBeenCalledWith(인수)
모의 함수가 특정 인수로 호출되었는지 확인한다.
expect(코드).toThrow(error?)
- error 로 들어갈 수 있는 것
- regular expression - 에러메시지 패턴과 일치하는지 확인
- string - 에러메시지의 부분문자열인지 확인
- error object - 에러 메시지가 에러 객체의 메시지 프로퍼티와 같은지 확인
- error class - 에러 객체가 넘긴 클래스의 인스턴스인지 확인
💡 코드를 꼭 함수로 감싸야 한다. 그렇지 않으면 에러가 잡히지 않고 테스트가 실패한다.
test("연산 문자열에 0이 포함되어 있으면 IncludeZeroError 반환", async () => {
expect(() => Input.validateNumbers("0,1,2", [])).toThrow(IncludeZeroError);
});
글로벌
afterEach(실행할 함수)
파일의 각 테스트가 완료된 후 함수를 실행한다.
// 테스트 완료 후 모킹 함수를 초기화
afterEach(jest.restoreAllMocks)
jest
jest.fn()
모의 함수를 생성 및 반환한다.
jest.spyOn(객체, "메서드명")
jest.fn() 과 유사하게 모의 함수를 생성하지만 넘겨받은 객체의 메서드 호출도 추적한다.
test("콘솔 테스트", async () => {
const spy = jest.spyOn(console, "log");
console.log("hi");
expect(spy).toHaveBeenCalledWith("hi");
});
jest.restoreAllMocks()
전체 모의 객체와 대체된 속성을 원래 값으로 복원한다.
- jest.spyOn() 과 jest.replaceProperty() 로 생성되고 수정된 모의 객체에만 적용
mockFn
mockFn.mockImplementation(함수)
모킹함수에 추가 구현을 할 수 있다.
const mockFn = jest.fn();
mockFn.mockImplementation(num => num + 1);
mockFn(2); // 3
mockFn(3); // 4
mockFn.mockResolvedValue(value)
아래와 동일한 코드이다.
mockFn.mockImplementation(()=>Promise.resolve(value));
const mockQuestions = (mockInput) => {
const spy = jest.spyOn(Console, "readLineAsync");
spy.mockResolvedValue(mockInput);
};
'TIL > 테스트' 카테고리의 다른 글
BDD, Given-When-Then 패턴 (0) | 2024.10.28 |
---|