단어장 앱에
테스트를 추가합니다
테스트 => 유닛테스트
Unit이란?
* A single function or class.
* 최소한의 코드 조각
Unit Test란?
* 개발자가 자신이 구현한 Unit이
생각한대로 작동하는 지 확인하는 행위
* 유닛 테스트를 100% 다 구성하고 코드가 Pass를 하면
* [ ] 문제 없음을 확신하며 바로 배포 준비에 들어간다
* [ ] 좀 불안. 별도로 추가 테스트가 필요할 것 같다
Unit Test !== Test
본인이 구현한 코드가 어떻게 작동하는 지 묘사한 설명서(사양서)
* 테스트 코드를 보면 처음에는 낯선 단어들이 나옴
* describe
* context
* it
- 위와 같이 코드의 요구 사양과 테스트 코드를 100% 일치 시킬 수 있다.
- 이런 것들을 코드 베이스의 모든 단위에 대해 수행하면 100% 커버가 된 코드베이스를 갖춘 것
describe(“getWordList”, () => { // test 하고자하는 함수 이름 혹은 클래스(컴포넌트) 이름
context(“when user is logged in”, () => { // 어떤 조건인지를 명시하고 싶을때
it(“returns 200 status code”, () => {
// 실질적으로 테스트 하려는 것
})
it(“returns word list data code”, () => {
// 실질적으로 테스트 하려는 것
})
})
})
프로덕트 단위의 테스트는 별도로 필요
* Integration Test
* End to End Test
* QA 부서
Unit Test는 왜 필요할까?
- 굳이 필요 없을 것만 같다
-
어느 정도는 공감을 하는 부분 (개인 취향)
-
**하지만** 다음과 같은 경우에는 꼭 필요
-
본인의 코드를 다른 사람과 공유할 때
-
오픈 소스, 팀 단위의 프로젝트 작업
-
-
코드를 **잘** 짜게끔 유도를 해준다
-
바람직한 경우, 예외의 경우
-
-
리팩토링을 상대적으로 마음 편하게 할 수 있다
Unit Test의 범위는?
- 코드 베이스 내 모든 코드 조각
하나의 js 파일 => 하나의 spec.js 파일
Unit Test는 언제?
- 중요한 이슈
- 실제 코드 작성하기 전에 테스트 코드 부터 작성
- 비직관적이지만 생각해보면 사양서를 먼저 쓴다고 생각하면 됨
- 이런식으로 작업하는 것이 TDD
- 코드와 병행하면서 작성, 혹은 작성 직후 작성
- 무난하면서 일반적인 접근
- 코드 작성 후 테스트 작성
- 거의 불가능. 내일부터 공부해야지 마인드
돈 받고 하는 코드와 안받고 하는 코드의 구분
테스트의 유무
테스트를 잘 작성하는 것만큼 중요한 것
코드를 잘 짜는 것 =
테스팅하기 좋은 코드를 짠다는 것
어떤 것이 더 좋은 코드일까?
- [ ] 함수를 최대한 적게 만들고 하나의 함수에서 최대한 많은 일을 하도록 하는 것이 좋다
- [ ] 함수를 최대한 여러개를 만들고 함수 단위로 최소한의 단위를 하도록 하는 것이 좋다
어떤 것이 더 좋은 코드일까?
- 테스트 하면 => 코드를 잘 짜게끔 해준다 => 좋은 코드란?
- 코드간의 의존성이 적은. 독립적.
- Isolated. 상대방에게 영향을 주지도 받지도 않는
- Deterministic. 정의된. 1억번 함수 실행시키면 1억번 똑같이 실행되는 함수
- 명료한. 함수 이름과 기능이 일대일 매치
React App에서의 유닛테스트
* 함수 혹은 클래스의 형태로 구성
Reducers
Actions, Action Creator
React.Components
JEST - FB에서 만든 Test Framework
npm run test // yarn test
Reducer부터 시작
Actions Creator 시작
Component는 다음 시간에
클래스라서 다소 복잡
* Render => 보여지는 것을 테스팅
* Component Did Mount 와 같은 생명 주기 핸들러
* 그외 로직
Intro to Jest
By Soh Paul
Intro to Jest
- 220