회고

[취업준비일지] - 125

Happy Programmer 2023. 2. 22. 23:05

1.테스트를 진행할 경우 이전과 같이 test()로 테스트를 진행할 수 있지만
테스트들의 그룹을 지정해주고 싶은 경우 describe()를 사용한다.
예를 들어 a, b, c를 테스트 하고 싶은 경우 아래와 같이 describe 내부에 넣으면 된다.

describe("Test for something about a, b and c", () => {
  test("Test about a", () => {
    expect().something()
  })
  test("Test about b", () => {
    expect().something()
  })
  test("Test about c", () => {
    expect().something()
  })
}


describe와 같이 진행할 경우 기존에는 아래와 같이 출력된다면

v Test about a
v Test about b
x Test about c


describe를 사용한 경우에는 아래와 같이 그룹으로 출력되는 것을 볼 수 있다.

Test for something about a, b and c
  v Test about a
  v Test about b
  x Test about c

 

  
또한 그룹 하나가 다른 test 하나 만큼의 공간을 차지하기 때문에
여러개의 describe를 사용할 경우 그룹화를 예쁘게 할 수 있다.


2.카멜케이스를 대문자들과 공백으로 이루어진 문장으로 교체하는 정규 표현식의 경우
str.replace(/\B([A-Z])\B/g, ' $1')이라고 한다.
단어 사이에 대문자가 있을 경우 대문자 앞에 공백을 추가한다는 의미다.


3.함수의 기능을 테스트 해야 할 경우 render()를 사용할 필요 없이
import {functionName} from "./App.js"같은 방식으로 함수만 꺼내온 다음
해당 함수만 테스트할 수 있다.

또한 describe를 응용해 각 함수별로 그룹화 한 다음
함수의 다양한 엣지케이스들을 개별의 테스트로 확인해
어떤 부분에서 문제가 발생하는지를 더 자세히 파악할 수 있다.





(1).백준 5220번 Error Detection은 비트가 제대로 전송되었는지를 확인하는 문제로
이진법으로 변환한 숫자의 1의 갯수가 홀수일 경우 1, 짝수일 경우 0으로 확인했는데
만약 홀, 짝이 1, 0과 매칭되지 않을 경우 오류가 발생한 것으로 가정하고
Corrupt이라는 문자를 출력하며 정상적으로 매칭된 경우 Valid를 출력하는 문제였다.

각 테스트케이스를 분할해 checkNumber, valid로 선언한 다음
while문을 통해 0이 될 때 까지 반복해서 처리하며
홀수의 경우 1을 뺴고 oddCheck++처리를 했으며
짝수의 경우 /2가 반복 처리되게 진행했다.

실제로 이런 행동을 통해 0, 1을 기록한다면 2진수가 역순서로 출력되는 것을 볼 수 있다.

어찌되었든간에 1의 홀, 짝의 갯수를 oddCheck에 기록했기 때문에
이 숫자와 valid를 비교한 뒤 유효할 경우 "Valid", 유효하지 않을 경우 "Corrupt"를 출력했다.

const input = `4
34173 1
45 1
15 0
31 0`.split('\n')

const result = []

for(let i = 1 ; i < input.length ; i++){
    let [checkNumber, valid] = input[i].split(' ').map(Number)
    let oddCheck = 0
    while(checkNumber > 0){
        if(checkNumber%2){
            checkNumber = (checkNumber-1)
            oddCheck++
        }
        else{
            checkNumber /= 2
        }
    }
    if(oddCheck%2 === valid){
        result.push("Valid")
    }
    else{
        result.push("Corrupt")
    }
}

console.log(result.join('\n'))