728x90
반응형
단위 테스트(Unit Test)
- 특정 조건에서 어떻게 작동해야 할지 정의한 것 (기능을 테스트)
- Input에 따라 계산한 결과를 Output으로 반환하는 것 (`함수`)
단위 테스트 3단계
1. 준비(arrange) : Input을 준비하는 단계
2. 실행(act) : Input을 전달받아 함수를 실행하는 단계
3. 단언(assert) : 결과를 검증하는 단계
이러한 단위 테스트를 통해 `테스트 주도 개발(TDD)`을 할 수 있다.
테스트 주도 개발(Test Driven Development)
- 적색(Red), 녹색(Green), 리팩터(Refactor) 순환
- 테스트하기 쉬운 코드
- 관심사의 분리
🔍 적색(Red), 녹색(Green), 리팩터(Refactor) 순환
- 적색(Red) : 실패하는 테스트 작성
- 녹색(Green) : 테스트를 통과하는 가장 간단한 코드 작성
- 리팩터(Refactor) : 코드 개선 및 중복 제거
코드를 개선할 때에는 개선한 코드가 기존 로직대로 작동한다는 것을 보장할 수 있어야 하는데, `테스트 주도 개발`을 통해 테스트 코드의 성공여부에 따라 리팩토링의 신뢰성을 보장받을 수 있다.
이에 따라, 자연스럽게 `테스트하기 쉬운 코드`를 작성하게 되고, 쉽게 테스트하기 위해서는 `함수가 하나의 기능`만 하도록 설계해야 한다.
Jasmine
`Jasmine`은 테스트 프레임워크 중 하나이다. 설치 방법은 스탠드얼론(standalone)과 카르마(karma)와 연동해서 사용하는 방법이 있다.
- 스탠드얼론(standalone) : 코드를 브라우저에 올려서 실행하는 방법(html)
- 카르마(karma) : 테스트 러너(Test Runner)로, 테스트 실행을 자동화
테스트 코드 구성
describe('hello world', ()=> { // 테스트 스윗: 테스트 유닛들의 모음
it('true is true', ()=> { // 테스트 유닛: 테스트 단위
expect(true).toBe(true) // 매쳐: 검증자
})
})
- describe : 테스트 스위트(suite)를 정의하는 함수이다. 관련된 테스트들을 그룹화하는데 사용된다. 보통 테스트할 기능이나 클래스의 이름을 설명한다.
describe('계산기 클래스', () => {
// 여기에 관련 테스트들이 들어갑니다
});
- it(test) : 개별 테스트 케이스를 정의하는 함수이다. 테스트하려는 특정 동작을 설명한다.
it('두 숫자를 더할 수 있어야 한다', () => {
// 특정 테스트 내용
});
- expect : 테스트의 실제 검증을 시작하는 함수이다. 테스트하려는 실제 값을 감싸서 다양한 matcher와 함께 사용한다.
expect(계산기.더하기(2, 3)) // 검증할 실제 값
- toBe : matcher 함수 중 하나로, 정확한 값이나 동일성을 검증할 때 사용한다. (=== 비교)
expect(계산기.더하기(2, 3)).toBe(5) // 정확히 5와 같은지 검증
- spyOn : 특정 객체의 메서드를 감시(spy)하는 함수이다. 테스트에서 메서드가 호출되었는지, 어떤 인자로 호출되었는지 등을 확인할 때 사용된다.
describe('알림 서비스', () => {
it('사용자에게 메시지를 보내야 한다', () => {
const 알림 = new 알림서비스();
// sendMessage 메서드를 감시
spyOn(알림, 'sendMessage');
알림.사용자알림('안녕하세요');
// 메서드가 호출되었는지 확인
expect(알림.sendMessage).toHaveBeenCalled();
// 특정 인자로 호출되었는지 확인
expect(알림.sendMessage).toHaveBeenCalledWith('안녕하세요');
// 호출 횟수 확인
expect(알림.sendMessage).toHaveBeenCalledTimes(1);
});
});
모듈 패턴(Module Pattern)
모듈 패턴은 자바스크립트에서 매우 중요하고 널리 사용되는 패턴이다. `모듈 패턴`이란 함수로 데이터를 감추고, 모듈 API를 담고 있는 객체를 반환하는 형태를 말한다.
- 캡슐화(Encapsulation)
- 비공개(private) 변수와 메서드를 구현할 수 있음
- 전역 스코프 오염을 방지
- 네임스페이스(Namespace)
- 관련된 기능들을 하나의 모듈로 그룹화
- 이름 충돌 방지
모듈 패턴 종류
1. 임의 모듈 패턴(임의 함수를 호출하여 생성하는 모듈)
2. 즉시 실행 함수(IIFE) 기반 모듈
모듈 생성 원칙
1. 단일 책인 원칙에 따라 모듈은 한 가지 역할만 한다.
→ 하나의 역할에 집중함으로서 모듈을 튼튼하게 만들고 테스트하기 쉽게 만든다.
2. 모듈 자신이 사용할 객체가 있다면 의존성 주입 형태로 제공한다.
→ 의존성 주입, 팩토리 주입형태로 제공하여 테스트하기 쉽게 만든다.
728x90
반응형
'프론트엔드 > JavaScript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 10장 - 객체 (2) | 2024.12.17 |
---|---|
[모던 자바스크립트 Deep Dive] 08장 - 제어문 (3) | 2024.12.09 |
[모던 자바스크립트 Deep Dive] 07장 - 연산자 (3) | 2024.11.19 |
[모던 자바스크립트 Deep Dive] 06장 - 데이터 타입 (2) | 2024.11.18 |
디바운스(Debounce), 쓰로틀(Throttle) (0) | 2024.11.17 |