728x90
기본 문법
// calculator.test.js
// 테스트 실행 명령어
// npm test
import { add } from './calculator.js';
test('두 수를 더하는 함수 테스트', () => {
expect(add(1, 2)).toBe(4);
});
// 함수 import
// test, expect, toBe
/*
test('설명',()=>{
expect(들어오는 값).toBe(기댓값)
})
expect(들어오는 값).toBe(기댓값)
*/
Test: 실제 테스트를 수행하는 함수. 여기 안에 테스트 로직을 작성해서 사용.
Expect: 테스트 대상 함수를 실행한 결과를 “예상” 값과 비교해 확인하는 기능
- 테스트가 성공하거나 실패하도록 설정하는 데 사용하는 핵심 함수
- 보통 expect(결과값).toBe(예상값) 형태로 작성
- toEqual, toContain, toBeTruthy 등
기본 사용법
test('값이 일치하는지 테스트', () => {
expect(1 + 1).toBe(2);
});
기본 매처
1. 값 비교
- toBe(value): 엄격한 동일성 비교 (===). 메모리 위치도 동일해야함
expect(2 + 2).toBe(4); - toEqual(value): 객체와 배열의 값이 같은지 확인. 값만 동일하면 됨.
expect({ a: 1 }).toEqual({ a: 1 }); - toStrictEqual(value): 객체의 모양과 데이터 타입까지 검사.
expect({ a: 1 }).toStrictEqual({ a: 1 });
2. Boolean 관련
- toBeTruthy(): 값이 true로 평가되는지 확인.
expect(1).toBeTruthy(); - toBeFalsy(): 값이 false로 평가되는지 확인.
expect(0).toBeFalsy();
expect(true).toBeTruthy();
expect(false).toBeFalsy();
expect(0).toBeFalsy(); // 0은 Falsy로 평가
expect('Hello').toBeTruthy(); // 빈 문자열이 아니면 Truthy
3. 숫자 관련
- toBeGreaterThan(value): 특정 값보다 큰지 확인.
expect(10).toBeGreaterThan(5); - toBeGreaterThanOrEqual(value): 특정 값보다 크거나 같은지 확인.
expect(10).toBeGreaterThanOrEqual(10); - toBeLessThan(value): 특정 값보다 작은지 확인.
expect(5).toBeLessThan(10); - toBeLessThanOrEqual(value): 특정 값보다 작거나 같은지 확인.
expect(10).toBeLessThanOrEqual(10); - toBeCloseTo(value, precision): 소수점 비교.
expect(0.1 + 0.2).toBeCloseTo(0.3, 5); // precision은 옵션
4. 문자열 관련
- toMatch(regexp or string): 정규식 또는 특정 문자열과 일치하는지 확인.
expect('hello world').toMatch(/world/); expect('hello world').toMatch('hello');
5. 배열 및 반복 가능한 객체
- toContain(value): 배열이 특정 값을 포함하는지 확인.
expect([1, 2, 3]).toContain(2); - toContainEqual(value): 객체를 포함하는 배열인지 확인.
expect([{ a: 1 }, { b: 2 }]).toContainEqual({ b: 2 }); - toHaveLength(value): 배열이나 문자열의 길이를 확인.
expect([1, 2, 3]).toHaveLength(3);
6. 예외 처리
- toThrow(error?): 함수가 특정 에러를 던지는지 확인.
expect(() => { throw new Error('에러 발생!'); }).toThrow('에러 발생!');
7. 객체 관련
- toHaveProperty(keyPath, value?): 객체에 특정 속성이 있는지 확인.
expect({ a: 1, b: 2 }).toHaveProperty('a', 1);
비동기 코드 테스트
1. resolves와 rejects
- Promise의 성공 또는 실패를 테스트.
await expect(Promise.resolve(42)).resolves.toBe(42); await expect(Promise.reject('에러')).rejects.toMatch('에러');
2. 비동기 함수
- async/await를 활용.
test('비동기 테스트', async () => { const data = await fetchData(); expect(data).toBeDefined(); });
부정 테스트
- not을 사용하여 부정적인 조건 확인.
expect(2 + 2).not.toBe(5); expect([1, 2, 3]).not.toContain(4);
이 외에도 Jest는 커스텀 매처를 정의하거나 추가 플러그인으로 매처를 확장할 수 있습니다.
공식 문서: Jest Expect 문법
TIP
describe : 동일한 주제 안에 속해있는 여러 test 작성 시 사용
유사한 테스트를 그룹화하면 관리하기 쉽고, 가독성도 좋아진다.
import { add } from "./calculator.js";
describe("calculator", () => {
test("두 수를 더하는 함수 성공 테스트", () => {
expect(add(1, 2)).toBe(3);
});
test("두 수를 더하는 함수 실패 테스트", () => {
expect(add(1, 2)).not.toBe(4);
});
});
beforeEach : 각 테스트 시작 전에 실행되는 부분.
보통 초기화 작업 등을 넣을 수 있음
afterEach : 각 테스트가 끝난 후 실행되는 부분
describe('수학 함수 테스트', () => {
beforeEach(() => {
// 테스트 시작 전 실행
});
afterEach(() => {
// 테스트 종료 후 실행
});
test('1 + 2 = 3', () => {
const result = add(1, 2);
expect(result).toBe(3); // 3이 맞는지 확인
});
});
toThrow: 함수 호출 시 오류(예외)가 발생하는지, 해당 메시지가 맞는지 확인
expect(() => {
throw new Error('Something broke!');
}).toThrow('Something broke!');
'내일배움 정리 > JS 문법 공부' 카테고리의 다른 글
nvm 사용해서 tsc 쓰고 있는데 .prettier이 .ts로 인식되는 문제 (0) | 2025.01.18 |
---|---|
배열안에 연산넣을 수 있음 (0) | 2025.01.16 |
달력, 시계 만들기 (0) | 2025.01.11 |
스왑 (0) | 2025.01.10 |
코드 접기 펴기 (0) | 2024.12.31 |