Jest 강좌 플레이리스트 by 코딩앙마

6개 시리즈로 강좌 10분씩 

한국어로 설명하며 가장 좋은 강좌

https://www.youtube.com/playlist?list=PLZKTXPmaJk8L1xCg_1cRjL5huINlP2JKt

image
image
image
image
image
image
image
image
image
image
image

.

비동기 함수 테스트

1. 콜백 함수 테스트

2. 비동기함수에서 에러를 throw하는 것을 테스트에서 catch 하는방법


3. promise를 이용하는 경우

아래에서 return구문 사용한것에 유의




위의 것을 사용해도 되고 아래것을 사용해도 된다

.

.

.

.

.
https://youtu.be/sVX6LNiNAeA

https://youtu.be/2d-SX8YRyis

image

.

.

React Testing Tutorial (Jest + React Testing Library)

20분 분량 설명이 매우 좋다

https://youtu.be/ML5egqL3YFE

image

react component 유닛 테스트를 위해 아래 라이브러리가 추가로 필요하다

image

.

.

afterEach 의 cleanup을 통해 화면(screen)을 클리어 해준다.

image
image

.

.

snapshot을 위해 react-test-renderer를 사용한다.

image
image

코드 작성후 npm run test를 해주면 아래와 같이 스냅샷이 만들어지고 저장된다.

image

다시한번더 npm run test를 했을때 스냅샷과 차이가 없으면 pass

차이가 있다면 아래와 같이 에러 발생하고 이상황에서 u를 눌러주면 스냅샷 업데이트가 된다.

image

https://youtu.be/mK54Cn4ceac

image

함수내에 변수를 만들면 외부와 분리 된다. 

함수 밖에 만들어진 변수는 global scope가 되며 전체 script에서 접근 가능하게 된다

image

위는 변수의 scope를 제한하는 또다른 방법

.

.

이 동영상에서는 es6 사용을 추천해준다

.

.

.

아래는 common js를 사용하는 경우이다.

common js의 경우 exports를 사용

es6 는 export 를 사용한다

또 es6의 경우 경로를 나타내는 경우 화일명까지 포함시켜야 한다.

image
image
image
image
image
image

common js의 require는 함수이므로 일반 함수와 같이 사용될수 있고

아래와 같이 선택적으로 사용될수도 있다

image

.

.

.

.

.

es6

image
image
image
image
image

original source : https://ui.dev/var-let-const/

var은 함수 전체에서 참조 가능. 

function discountPrices (prices, discount) {
  var discounted = []

  for (var i = 0; i < prices.length; i++) {
    var discountedPrice = prices[i] * (1 - discount)
    var finalPrice = Math.round(discountedPrice * 100) / 100
    discounted.push(finalPrice)
  }

  console.log(i) // 3
  console.log(discountedPrice) // 150
  console.log(finalPrice) // 150

  return discounted
}

for loop안에서 정의된 변수값을 밖에서 참조 가능. 함수 scope이기 때문이다.

.

function discountPrices (prices, discount) {
  console.log(discounted) // undefined
  var discounted = []

  for (var i = 0; i < prices.length; i++) {
    var discountedPrice = prices[i] * (1 - discount)
    var finalPrice = Math.round(discountedPrice * 100) / 100
    discounted.push(finalPrice)
  }

  console.log(i) // 3
  console.log(discountedPrice) // 150
  console.log(finalPrice) // 150

  return discounted
}

var의 경우 정의하기 전에 참조 시도하면 undefined값을 기본을 가짐. 이는 interpreter가 뒤에서 하는 작업으로 다른 언어를 생각하면 이해하기 힘들지만 그렇다. 이렇게 미리 기본값을 넣어 놓는 것을 hoisting이라고 한다. 

.

.

.

let 블락 scope

function discountPrices (prices, discount) {
  let discounted = []

  for (let i = 0; i < prices.length; i++) {
    let discountedPrice = prices[i] * (1 - discount)
    let finalPrice = Math.round(discountedPrice * 100) / 100
    discounted.push(finalPrice)
  }

  console.log(i)  console.log(discountedPrice)  console.log(finalPrice)
  return discounted
}

for loop안의 변수 밖에서 참조 못함.

.

function discountPrices (prices, discount) {
  console.log(discounted) // ❌ ReferenceError
  let discounted = []

  for (let i = 0; i < prices.length; i++) {
    let discountedPrice = prices[i] * (1 - discount)
    let finalPrice = Math.round(discountedPrice * 100) / 100
    discounted.push(finalPrice)
  }

  console.log(i) // 3
  console.log(discountedPrice) // 150
  console.log(finalPrice) // 150

  return discounted
}

let 은 hoisting작업을 안하게 한다.

.

.

const는 let가 비슷하나 reasign이 되지 않는다.

let name = 'Tyler'
const handle = 'tylermcginnis'

name = 'Tyler McGinnis' // ✅
handle = '@tylermcginnis' // ❌ TypeError: Assignment to constant variable.

Promise
https://youtu.be/_JOP8rcDjJE

참고사항)

https://stackoverflow.com/a/46719997

Promise로 되돌아 오는 결과는 await을 통하거나 .then( data => {}) 를 통해서 얻어낼수 있다

.

async, await
https://youtu.be/RXN7169vBGw