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 를 사용하여 TDD 개발 흐름으로 투두리스트 만들기

비동기적으로 바뀌는 컴포넌트 UI 테스트

 

비동기적으로 바뀌는 컴포넌트 UI 테스트

Async Utilities 함수를 사용
wait 

  • 해당 함수를 사용하여 특정 콜백에서 에러를 발생하지 않을때까지 대기
  • timeout을 초과하면 테스트 실패(timeout 기본값 4500ms, 커스터마이징가능)
  • 리액트 16.8 버전 버그있음


waitForElement

  • 해당 함수로 특정 엘리먼트의 변화가 생길때까지 대기(show, hide, change..)
  • 프로미스가 끝날때 선택한 엘리먼트 resolve


waitForDomChange

  • 해당 함수 특징으로 콜백함수가 아닌 검사하고 싶은 엘리먼트를 넣어주면 해당 엘리먼트 변화가 발생할때까지 대기
  • 프로미스가 resolve 되면 mutationList를 통해 DOM의 변화 정보를 알 수 있음


waitForElementToBeRemoved

  • 특정 엘리먼트가 화면에서 사라질때까지 대기 

 

REST API 호출 테스트방법

  • axios 설치, JSONPlaceholder를 통해 가짜 API 사용할 주소로 API 호출
  • 이때 실제 요청하지 않고 node_modules를 mocking하는 방법 혹은 axios-mock-adapter라이브러리 사용

react-testing-library 를 사용하여 TDD 개발 흐름으로 투두리스트 만들기

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

 

비동기적으로 바뀌는 컴포넌트 UI 테스트

https://velog.io/@velopert/react-testing-library-%EC%9D%98-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9E%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8

 

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

+ Recent posts