본문 바로가기

TIL

20210713 [항해 37일 차]

중요한 질문은 “당신이 얼마나 바쁜가?”가 아니다.
“당신이 무엇에 바쁜가”가 핵심 질문이다.
- 오프라 윈프리 -

 

오전에 기존에 짰던 코드를 보며 

param, query의 사용법을 알아봤다.

끝이 ?로 시작하는 형태의 URL은 req.query

/id 로 끝나는 형태는 req.params로 전달되는 것 같다. 아마 정해진 문법(?로 시작, ?없이 그냥 종료)에 따라 전달 형태가 정해져 있는 것 같다. 현재 id 값 대신 다른 어떤 무엇인가로 끝나더라도 params로 받을 수 있지 않을까 추측 한다.(걍 그러지 않을까 싶은데 맞는지 틀린지 모르겠다. id에도 특정한 규칙이 정해져있다면 id값 제외하고는 안될듯함)

 

오브젝트 형식에서 특정 값을 빼오는 두가지 형태의 방법을 알아봤다.

response.title 

response['title'] 

두가지 형식이 모두 가능했다. 둘의 정확한 문법적 차이점을 몰라 다른 상황일 때는 어떻게 써야할지는 아직 미지수지만 앞으로 또 다른 형태일 때 다양한 방식으로 시도해보면서 값을 뽑는 방법을 익혀야할 것 같다. 

req.params, req.query의 차이

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ테스트 코드 작성 연습 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

isEmail이라는 메일을 확인하는 함수에 아래 요구사항을 만족하는 테스트코드 작성을 해보고, 테스트코드 작동이 실패 되었을 경우 함수를 테스트 코드의 테스트가 성공하도록 함수를 고쳐보는 시간을 가졌다. 우선 isEmail()이 어떻게 생겼는지 확인하지 않고 요구 사항에 대한 테스트 코드를 먼저 작성한다.

 

우선 터미널에 명령어를 통해 필요한 패키지를 설치한다.

 

npm init -y

npm jest -D 

pacage.json에 scripts 내부 test 값을 "jest"로 변경해준다.

validation.js 생성, 함수를 만들고 module.exports를 한다.

validation.spec.js 생성, 여기에 테스트 코드를 작성한다.

  • 입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.
  • 입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.
  • 입력한 이메일 주소 맨 앞에 하이픈(-)이 있으면 이메일 형식이 아니다.

위 요구사항에 대한 테스트 코드 작성은 이렇게 했다.

const { expect } = require('@jest/globals')
const { isEmail } = require('./validation')

test('입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.', () => {
  expect(isEmail('awrawr@naver.com')).toEqual(true)
  expect(isEmail('awrawr@@naver.com')).toEqual(false)
  expect(isEmail('awrde.naver.com')).toEqual(false)
})

test('입력한 이메일 주소에 공백이 존재하면 이메일 형식이 아니다.', () => {
  expect(isEmail('real@naver.com')).toEqual(true)
  expect(isEmail('test email@naver.com')).toEqual(false)
  expect(isEmail('test email @n aver.com')).toEqual(false)
})

test('입력한 이메일 주소 맨 앞에 하이픈이 있으면 이메일 형식이 아니다.', () => {
  expect(isEmail('zero-game@gmail.com')).toEqual(true)
  expect(isEmail('hihibyby@gmail.com')).toEqual(true)
  expect(isEmail('-zero-game@gmail.com')).toEqual(false)
})

요구사항을 테스트하는 테스트코드 작성

npm test로 실행한 결과를 아래에서 볼 수 있다.

테스트가 실패하는 이유는 간단하다. 요구사항에 해당하는 함수가 제대로 만들어지지 않았기 때문이다. 현재 함수를 살펴보면 계속 false를 반환하는 중이다.

module.exports = {
  isEmail: (value) => {
    // value가 이메일 형식에 맞으면 true, 형식에 맞지 않으면 false를 return 하도록 구현할 예정
    return false
  },
}
module.exports = {
  isEmail: (value) => {
    if (value.split('@').length !== 2) {
      return false
    } else if (value.includes(' ')) {
      return false
    } else if (value[0] === '-') {
      return false
    }

    return true
  },
}

요렇게 바꿔주면 테스트 코드 통과한다.

테스트 통과

테스트코드를 예제를 통해 연습해봤는데 내일은 내가 만든 게시판 내부에 테스트코드를 적용해보고 싶다.

'TIL' 카테고리의 다른 글

20210715 [항해 39일 차]  (2) 2021.07.15
20210714 [항해 38일 차] 건강 조심하자  (0) 2021.07.14
20210712 [항해 36일 차] 미니 프로젝트 시작  (0) 2021.07.13
20210711 [항해 35일 차]  (0) 2021.07.12
20210710 [항해 34일 차]  (0) 2021.07.11