테스트 코드 test code, 정규표현식

신동윤·2023년 2월 28일
0

라이브러리 설치
npm i jest supertest -D

테스트 코드를 작성하는 목적

https://teamsparta.notion.site/4-1-45e4731294bc46149a8258f13df54a74#2106a1ca47af42c9b469fc22d5c00f84

"내 코드가 멀쩡하다!" 라고 증명하기 위한게 아니고, "내 코드가 멀쩡하다면 이렇게 결과가 나와야 한다!

-test(): 단위 테스트를 묶어주는 함수입니다.
-expect(): 특정 값이 만족되는지(정상적인지) 확인하기 위한 표현식을 작성할수 있게 해주는 함수입니다.

test("입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.", () => {
  expect(isEmail("myemail@domain.com")).toEqual(true);
  expect(isEmail("my email@domain.com")).toEqual(false);
});

Mock이란

특정 Method를 Mocking하기 위해 사용됩니다.
즉, 테스트에서 시간 또는 비용이 많이들거나 의존성이 있는 코드를 실제로 실행하지 않고 호출 여부, 입력한 값의 일치 여부와 같은 정보를 확인하기 위해 사용하는 가짜 객체입니다.

-자주 사용하는 Mock expect 문법

.toHaveBeenCalledTimes(number)

Mock이 몇번 호출되었는지 검증합니다.

.toHaveBeenCalledWith(arg1, arg2, ...)

어떤 인자를 이용해 Mock이 호출되었는지 검사합니다.

정규표현식 기본

/^[a-zA-z0-9+_-]+$/ ^정규표현식 시작, $정규표현식 끝, []는 여러문자를 한번에 검사, +는 []안에있는 조건에 맞는 문자가 들어오면 통과해라 뜻
i는 대소문자 구분 없이, g는 문자열 어디에서든 검사한다.

if (!/^[a-z0-9.-]+$/gi.test(domain)) {
  	return false;
}

단어 공부

-오버 엔지니어링
사람들은 누군가 불필요한 엔지니어링을 한다고 판단할 때 오버엔지니어링이라 부르며 부정적으로 생각한다. 엔지니어링은 어떤 면에서 미래를 위한 투자로 볼 수 있다. 이런 투자가 과열될 때 오버엔지니어링이 되기 쉬운 것 같다. 그래서 개발자는 오버엔지니어링을 하기보다는 적절한 수준의 엔지니어링을 뜻하는 적정엔지니어링을 추구할 필요가 있다고 본다.
https://minslovey.tistory.com/117

-기술부채
일반적인 "부채"가 이자를 내고 돈을 쓰는 시점을 당기는 것처럼 기술 부채는 기술적으로 해결되어야 할 문제들을 뒤로 미루고, 비즈니스 문제를 해결하는 시점을 당기는 것이다.
https://brunch.co.kr/@leehosung/2

-좋은 인터페이스
최고의 인터페이스는 눈에 보이지 않는다.
결국, 사람을 이해해야 한다.

-유지보수
개발자가 이슈 해결을 위해 기능을 이해하고 코드를 이해하는데 투자되는 시간을 얼만 줄일 수 있는지가 관건이다.

-morking
실제 DB를 연결하지 않아도 테스트해볼수있다. Layered Architecture Pattern으로 분리하면 테스트하기 쉽다.

0개의 댓글