하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트
모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트
문자열을 직접 비교하는건 오류가 발생하기 충분히 쉽다.
ex)
if (node.type === 'DIRECTORY') {...}
if (node.type === 'FILE') {...}
객체를 만들어 그곳에 저장시켜 처리한다.
ex)
const NodeType = { DIRECTORY: 'DIRECTORY', FILE: 'FILE', }
if (node.type === NodeType.DIRECTORY) { ... }
if (node.type === NodeType.FILE) { ... }
안되는 상황에 대해 미리 리턴을 진행한다.
- 가독성이 좋다 => 의미 명확
- 누군가가 실수로 결과를 수정하려는 코드를 넣는다고 해도 안전
- 문제에 따르는 코드의 동작을 줄일 수 있다.
if (!type || ! validation(this.state)) { return }
JS 테스트 프레임워크
작성한 코드가 제대로 동작하는지 확인할 때 사용
isRoot: id ? false : true
isRoot: !id
if (!(typeof isRoot === "boolean")) alert("isRoot validation Error");
if (!(typeof isLoading === "boolean")) alert("isLoading validation Error");
if (!(nodes instanceof Array)) alert("nodes validation Error");
if (!(paths instanceof Array)) alert("paths validation Error");
if (!(typeof type === "string")) {
alert("type validation Error");
}
if (!(typeof selectedImageUrl === "string")) {
alert("selectedImagUrl validation Error");
} else return true;
const validationBoolean = (value, fieldName) => {
if (typeof value !== 'boolean') {
throw new Error(`${fieldName} is not boolean!`)
}
}
const validationString = (value, fieldName) => {
if (typeof value !== 'string') {
throw new Error(`${fieldName} is not boolean!`)
}
}
const validationArray = (value, fieldName) => {
if (!(nodes instanceof Array)) {
throw new Error(`${fieldName} is not boolean!`)
}
}
validationBoolean(isRoot, 'isRoot')
validationBoolean(isLoading, 'isLoading')
validationString(type, 'string')
validationString(selectedImageUrl, 'string')
validationArray(nodes, 'nodes')
validationArray(paths, 'paths')
- 에러상황에 대해서 사용자에게 친절하게 알려주는 부분은 지양하는게 좋다
- 보통 "에러가 발생했습니다. 재시도해주세요!" 정도로만 보여주고 뒤에서 로깅해서 개발자에게 알려주는 경우가 더 많다
- 어차피 구체적으로 알려줘봤자 대처할 수 없는 사용자이기도 하고, 취약점을 알려주는 경우도 될 수 있어서 그렇다
- 기본값은 많이 알 수록 원인을 찾을 수 있다.
- PostCSS는 CSS 표준 문법(CSS 커스텀 프로퍼티)이나 표준화 작업 중에 있는 문법(CSS 중첩(Nesting))을 제공
- PostCSS는 Sass에 비해 덜 유명
- Babel : 하위 호환성 맞추기
- 크로스 브라우징 : 웹 페이지 제작 시에 모든 브라우저에서 깨지지 않고 의도한 대로 올바르게(호환성) 나오게 하는 작업 ( 최대한 다 비슷하게 만드는 것 )
- polyfill : 웹 개발에서 기능을 지원하지 않는 웹 브라우저 상의 기능을 구현하는 코드
polyfill : 새로 추가된 전역 객체들(Promise, Map, Set)을 사용가능한 객체로 바꾸어주는 개념
babel: ES6/7 코드를 ES5 코드로 Transpiling 해주는 Transpiler