1.@testing-library/user-event에서 userEvent를 import할 경우
조금 더 편하게 테스트를 진행할 수 있다.
예를 들어 userEvent의 동작을 아래와 같이 사용할 경우 fireEvent를 대체할 수 있다.

const user = userEvent.setup();
user.click(checkbox)
// fireEvent.click(checkbox)와 기능적으로 같지만 정상작동이 되지 않는다.


하지만 userEvent는 항상 promise를 반환하기 때문에  
아래와 같이 async, await을 사용해야 정상적으로 작동하는 것을 볼 수 있다.

test("test name", async () => {
  const user = userEvent.setup();
  await user.click(checkbox)
  // fireEvent.click(checkbox)와 동일한 동작을 한다.
})

 

user 객체에는 keyboard, click, hover, unhover등의 메세드가 존재한다.


2.쿼리를 사용해 테스트를 할 경우 쿼리는 모두가 접근할 수 있어야 한다.
예를 들어 화면을 보며 사용하는 사람과 스크린 리더 등의 보조기구를 사용하는 사람이
작동시키는 것이 서로 다른 쿼리를 사용해 테스트할경우
한 쪽의 작동은 정상적으로 될 수 있지만 다른 쪽의 정상작동은 보장되지 않는다.
또한 테스트를 이미 진행하고 넘어갔기 때문에 오류를 발견하기가 훨씬 더 어려울 수 있다.

그렇기 때문에 Semantic Queries는 
테스트 진행 여부를 확인하기 어렵기 때문에 사용이 권장되지 않으며
ID 또한 최후의 수단으로 사용된다.


3.hover가 제대로 진행되는지 확인하기 위해서는 아래와 같은 절차로 3가지 테스트를 진행해야 한다.

  1.hover가 되기 전 원하는 변화가 적용되지 않았는지를 확인하고
  2.hover가 된 후 원하는 변화가 적용되었는지 확인하고
  3.hover가 해제된 후 원하는 변화가 적용되지 않았는지를 확인해야 한다.

 

이전에 언급했듯 세개의 테스트가 하나의 기능을 테스트하고 있기 때문에 
각각의 expect 3개가 하나의 test에 들어가게 진행해도 상관이 없다.

또한 예상치 못한 결과가 나온 경우 user를 사용했을 때 promise를 반환한다는 사실을 기억하자.


4.객체를 순회할 때는 for(let key in obj){}를 주로 사용했지만
Object.entries(obj).forEach()로 순회하는 것이 훨씬 더 좋다고 한다.
예전에 배웠던 Object.keys등 뿐만 아니라 Object의 메서드들에 대해 더 알아보는 시간이 됐다.

entries, keys외에도 
values(값만 조회), hasOwn(키 보유 조회), assign(키,값 추가) 등이 있다.


5.컴퓨터의 역사는 생각보다 오래 되었는데 
The Tabulating Machine Company가 1924년 합병을 통해 
The International Business Machines Corporation(IBM)가 되었다고 한다.

기원은 주판과 같은 방식에서 시작해서
단순 계산(사칙연산)을 하는 수준으로 끌어올려지고
필요에 의해서 점점 개발되어 천공카드로 인구조사를 하다가
그 뒤로 유용성이 인정받고 대규모로 투자를 받아 현대적인 컴퓨터의 기반이 되었다.

발전된 방식으로는 계전기라는 열고 닫는 기계 팔을 통해
전기가 통하는지 통하지 않는지 (0/1)를 통해 처리했는데
기계가 열이나고 어두웠기 때문에 벌레들이 좋아하는 환경이 되어
나방 등이 들어가는 경우가 있었는데 이로 인해 에러가 발생했고 
그 뒤로 컴퓨터에서 문제가 생길 경우 "버그가 있다"라고 말하게 되었다.

하지만 계전기 방식은 속도가 느리고 마모의 문제가 있었기 때문에
진공관 방식으로 발전하게 된다.

하지만 진공관은 부서지기 쉽고 마모되지 않지만 고장도 날 수 있었으며 가격도 비쌌다.

그 뒤로 "트랜지스터"가 드디어 발명되며
훨씬 더 빠르고 저렴하며 정확하고 튼튼하다는 장점이 있어 현재까지 사용되고 있다.

현재는 초기 트랜지스터보다 수백배 더 빠르고 수만배 이상 더 작아졌지만
더 이상 발전할 여지가 막혀 있어 다른 방식으로의 전환이 필요한 시점이 된 것 같다.





(1).백준 2606번 바이러스는 1번 컴퓨터가 바이러스에 감염될 경우
연결된 모든 컴퓨터가 감염된다고 할 때 몇개의 컴퓨터가 1번을 통해 걸리는지 묻는 문제였다.
일단 중복된 내용을 확인할 필요가 없다고 생각했기 때문에 routeCheck 배열을 만들고
해당 배열에서 0이 될 경우 감염되었다고 판단하는 방식으로 진행했으며
경로를 펼치기 위한 nodeList와
while문으로 탐색을 진행할 때 사용할 nodeStack 배열을 선언한 다음
시작은 무조건 1번의 감염이기 때문에 nodeStack에 1을 넣어주고 while문을 돌렸다.

여기서 에러가 발생했는데 1번에서 감염된 컴퓨터의 갯수를 묻는 문제였는데
1번까지 포함해서 카운팅을 해서 틀렸던 것으로
virusCount의 시작값을 0이 아닌 -1로 변경하니 (stack에는 1을 넣고 시작) 정답 처리되었다.

횟수를 얼마나 사용하는지 계산해보니 단 6회밖에 조회하지 않았는데
중복이 효과적으로 제거되었다는 것을 알 수 있었다.

const input = `7
6
1 2
2 3
1 5
5 2
5 6
4 7`.split('\n')

const routeCheck = new Array(101).fill(1)
let virusCount = -1
const nodeList = {}
const nodeStack = [1]

for(let i = 2 ; i < input.length ; i++){
    const [a, b] = input[i].split(' ')
    if(nodeList[a]){
        nodeList[a].push(b)
    }
    else{
        nodeList[a] = [b]
    }
    if(nodeList[b]){
        nodeList[b].push(a)
    }
    else{
        nodeList[b] = [a]
    }
}

while(nodeStack.length){
    const nodeNow = nodeStack.pop()
    if(routeCheck[nodeNow]){
        routeCheck[nodeNow] = 0
        virusCount++
    }
    for(let i = 0 ; i < nodeList[nodeNow].length ; i++){
        if(routeCheck[nodeList[nodeNow][i]]){
            nodeStack.push(nodeList[nodeNow][i])
        }
    }
}

console.log(virusCount)

'회고' 카테고리의 다른 글

[취업준비일지] - 128  (0) 2023.02.25
[취업준비일지] - 127  (0) 2023.02.24
[취업준비일지] - 125  (0) 2023.02.22
[취업준비일지] - 124  (0) 2023.02.21
[취업준비일지] - 123  (0) 2023.02.20

+ Recent posts