Test 코드 작성 해보기
시작하기
간단하게 test 코드를 작성하고 실행해 봅시다.
import {sum} from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
yarn run test:watch
- 결과

각 구문은 마치 책을 읽듯 직관적으로 읽힙니다. 1 + 2 가 3인지 테스트를 할것이다. sum(1,2) 의 결과 값이 3 이길 기대한다. 로 해석할 수 있을것 입니다. 조금 더 다양한 케이스를 다루는 테스트 코드를 살펴봅시다.
describe('add', () => {
it('should return 0 when given no arguments', () => {
expect(add()).toBe(0);
});
it('should return the sum of two numbers', () => {
expect(add(2, 3)).toBe(5);
});
it('should return the sum of multiple numbers', () => {
expect(add(1, 2, 3, 4, 5)).toBe(15);
});
it('should return the sum of numbers with decimal places', () => {
expect(add(0.1, 0.2)).toBe(0.3);
});
});
- 결과

각각 구문은 어떤 정확히 어떤 역할을 하는걸까요?
describe(name, fn)
연관된 테스트를 Grupping 하는 함수 입니다.
test(name, fn)
alias: it(name, fn, timeout)
test
, it
함수는 각 테스트 케이스를 지정하는 함수입니다.
expect(value)
검증 하는 함수입니다. expect
는 예시의 toBe
와 같은 matcher
로 다양한 검증을 진행 할 수 있습니다.
아래 링크에서 다양한 matcher 를 확인해 보세요.
가장 핵심 문법을 알아보았습니다. 이것이 절반에 해당한다고 생각합니다. 그럼 나머지 절반은 무엇일까요? 테스트 코드를 더 잘 작성하는 방법, 그리고 스스로 배워 나가야 할 다양한 방법과 스킬입니다. 다음 섹션에선 테스트 코드를 더 잘 작성하는 방법을 소개합니다.
Given/When/Then
각각은 무엇을 의미할까요?
given
테스트 코드를 하기위한 환경을 준비합니다. js 에선 데이터를 setting 하거나 intializing 하는 과정입니다.
when
테스트하고자 하는 행위를 실행하는 과정입니다.
then
실행된 결과를 검증 하는 과정입니다.
코드와 함께 확인해 보면서 각 로직이 테스트 코드에서 어떤 단계에 포함되는지 확인해 보세요.
type User = {
id: number;
name: string;
};
export class UserManager {
users: User[] = [];
addUser = (user: User) => {
this.users.push(user);
return this.users;
};
deleteUser = (id: number) => {
const updated = this.users.filter((user) => user.id !== id);
this.users = updated;
return this.users;
};
}
- test code
import { UserManager } from '../manager';
// Given(준비)
const userManager = new UserManager();
const user = { id: 1, name: 'John Doe' };
describe('UserManager', () => {
test('addUser should add a user to the users array', () => {
// When(실행)
userManager.addUser(user);
// Then(검증)
expect(userManager.users).toHaveLength(1);
expect(userManager.users[0]).toEqual(user);
});
});