ES6 간단하게 알고가기

 

 

선언 

ES6에서는 블럭 스코프 선언 방식(let, const)을 사용한다.

 

  • let

    •  

      변수
  • const

    • 상수 (배열과 오브젝트의 값 변경은 가능하다.)

  • immutable array

    • 기존 배열을 복제하여 사용한다. 

    • 전개연산자(Spread Operator)를 사용하여 복제할 수도 있다. (immutable.js라는 라이브러리도 있다.)

const a = [1,2,3];
const b = [...a];

 

 

메서드

 

  • 화살표함수(Arrow function)

  • 클래스 개념 도입

  • setPrototypeOf

    • 프로토타입 객체 추가

  • 모듈(module)

  • 프록시(proxy)

  • startsWith(), endWith()

    • 앞 뒤로 문자열 일치 여부 판단

  • includes()

    • 문자열 포함 여부 판단

  • for-of

    • for-in 에서 상위 프로토타입의 값이 포함되는 문제 발생, value 순회로 for-in 문제 방지

  • 전개연산자(Spread Operator)

  • 나머지 매개변수(rest parameter)

  • 기본 매개변수(default parameter)

  • Array.from

    • 유사배열을 배열로 만들어준다.

    • querySelectAll로 얻은 노드리스트를 배열로 변경할수도 있다.

  • 필수(기본) 파라미터

  • 구조 분해

  • set(), weakset()

  • 백틱(`), 템플릿처리 ${}

 

 

객체와 변경불가성(Immutability)

원시 타입은 변경 불가능한 값이며 그 외 값은 객체 타입. 객체 타입은 변경 가능한 값이다.

(새로운 값을 다시 만들지 않고 직접 변경 가능)

참조하는 동작으로 의도하지 않은 결과가 나올 수 있다.

따라서 불변 데이터 패턴이 필요하다.

 

불변 데이터 패턴

참조가 아닌 객체의 방어적 복사를 통해 새로운 객체를 생성한 후 변경한다.

(원본 데이터의 불변)

 

1.객체의 방어적 복사(defensive copy) - Object.assign

Object.assign은 shallow copy이며 deep copy가 아니다.

 

2.불변 객체화를 통한 객체 변경 방지- Object.freeze

Object.freeze는 shallow freeze이며 객체 내부의 freeze를 원한다면 deep freeze를 해야한다.

 

immutable.js

Object.assign, Object.freeze는 번거로우면 성능상 이슈가 있어서 큰 객체에는 사용을 지양한다. (??)

다른 대안 : Facebook이 제공하는 라이브러리 immutable.js를 대안으로 사용할 수 있다.(영구 불변 데이터 구조를 제공)

 


ES6 정리 

https://velog.io/@godori/ES6-%EC%A0%95%EB%A6%AC-vpjmrh6hhe

ES6 특징 핵심요약

https://avengersrhydon1121.tistory.com/104

객체와 변경불가성(Immutability)

https://poiemaweb.com/js-immutability

ref https://dassur.ma/things/deep-copy/

ES6-꿀팁

원문 :  https://www.sitepoint.com/shorthand-javascript-techniques/

ref https://chanspark.github.io/2017/11/28/ES6-%EA%BF%80%ED%8C%81.html

 

react-testing-library 를 사용한 리액트 컴포넌트 테스트

react-testing-library

  • Enzyme과 달리 모든 테스트를 DOM 위주로 진행
  • 필요한 기능만 지원해서 가볍다
  • 일관성있고 좋은 관습을 따르는 테스트 코드를 작성할 수 있게 유도해준다.
  • props, state 조회하는 작업을 하지 않음
  • 리팩터링 시 구조, 네이밍 변경 시 기능이 똑같이 작동한다면 테스트가 실패하지 않음

 

  1. CRA 프로젝트 생성
  2. react-testing-library, jest-dom 설치
    1. jest-dom은 jest 확장, dom관련 matcher를 추가해준다.
    2. vscode 사용 시 @types/jest 도 같이 설치
  3. 테스트 코드 작성
  4. 테스팅

 

스냅샷 테스팅

ㄴ 렌더링결과와 이전 렌더링 결과의 일치여부(u 키로 업데이트)

 

쿼리함수

ㄴ react-testing-library 기반 dom-testing-library에서 지원하느 함수들

ㄴ Variant, Queries의 조합으로 네이밍이 이루어짐

 


 

react-testing-library 를 사용한 리액트 컴포넌트 테스트

https://velog.io/@velopert/react-testing-library

Enzyme를 사용하여 리액트 컴포넌트 테스트

 

테스트 소개

가장 기본적인 방법은 내부 유틸 함수인 react-dom/test-utils 사용한다.

하지만 복잡하고 불편한 점이 있기 때문에 리액트 공식문서에서도 테스팅 라이브러리 사용을 권장한다.

react-testing-library를 권장하며 Enzyme를 대체하여 사용할 수 있다고 언급한다.

두 라이브러리는 서로 다른 철학을 가지고 있다.

 

Enzyme

  • 컴포넌트 내부 기능 집중
  • post나 state 확인
  • 컴포넌트 내장 메서드를 직접 호출

 

react-testing-library

  • 렌더링 결과에 집중
  • 컴포넌트 인스턴스에 신경쓰지 않고 화면에 보여지는 것
  • 이벤트 발생 시 화면의 변화에 대한 부분에 최적화
  • 사용자 관점에서 테스팅하기 용이하다.

 

Enzyme

1. IDE의 지원을 제대로 받기위해 jest 설치

  • CRA로 만든 프로젝트는 jest가 이미 설치되어 있으나 아닌 경우에는 @types/jest를 통해 설치

2. enzyme enzyme-adapter-react-16 라이브러리 설치 

  • 스냅샷 테스팅은 enzyme-to-json 라이브러리 추가 설치

3. package.json에 jest 설정

  • 필요하다면!

4. 테스트 코드 작성

 

테스트 목록

  • 스냅샷 테스팅
  • props 접근
  • DOM 확인
  • 클래스형 컴포넌트의 테스팅
  • DOM 이벤트 시뮬레이트

 


 

리액트 테스트의 소개

https://velog.io/@velopert/%EB%A6%AC%EC%95%A1%ED%8A%B8-%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%9D%98-%EC%86%8C%EA%B0%9C

 

Enzyme를 사용하여 리액트 컴포넌트 테스트

https://velog.io/@velopert/react-testing-with-enzyme

자바스크립트-테스팅의-기초

 

유닛테스트

작은단위로 기능을 잘게 조개서 잘 동작하는지 확인

기능 단위

 

통합테스트

전체적으로 동작이 잘되는지 확인

컴포넌트 상호작용

 

테스트 도구 종류는 다양하고 여러 목적에 따라 특출난 것들이 있으니 확인 후 선정하면 될 듯

아래는 테스트도구 10개를 소개하는 글이다.

http://www.itworld.co.kr/news/128974

 

원본 글에서는 설정이 간단하고 시작하기 편하다며 Jest를 사용했다.

jset와 @types/jest를 npm install한다.

 

-함수를 만들었으면 test함수도 만든다.

-test 키워드 대신 it 키워드를 쓴다.

-describe를 사용해서 여러 테스트 케이스를 묶는다.

 

테스트 코드 작성 시의 이점은 리팩토링 이후 코드가 잘 동작하는지 검증하기가 간편하다는 점이다.

테스팅 관련해서 벨로퍼트님의 글을 순서대로 읽으면 될 듯 하다.

 


원본

벨로퍼트와 함께하는 리액트 테스팅

https://velog.io/@velopert/react-testing

 

자바스크립트-테스팅의-기초

https://velog.io/@velopert/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%85%8C%EC%8A%A4%ED%8C%85%EC%9D%98-%EA%B8%B0%EC%B4%88

+ Recent posts