인파

You Can Become A

늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !

공부한 내용을 정리합니다
Testing/JEST

[JEST] 📚 Supertest 사용법 (통합 API 테스트)

Supertest 이때까지는 JEST를 이용해 메서드 레벨의 단위 테스트를 다루었다. 단위 테스트란, 가장 작은 단위를 테스트한다는 것으로 즉각적인 피드백이 나온다는 장점이 있다. 하지만, 하나의 메서드가 잘 동작하는 것은 보장할 수 있지만, 그들이 결합되었을 때도 잘 작동한다는 보장 할 수 없다. 반면, 통합 테스트란, API의 기능을 테스트 하는 것으로, 여러 개(외부 라이브러리도 포함)를 통합해서 테스트하는 것을 말한다. 슈퍼테스트는 ExpressJS 통합 테스트용 라이브러리로 내부적으로 익스프레스 서버를 구동시켜 가상의 요청을 보낸 뒤 결과를 검증한다. API 서버를 만들고 HTTP 검증 도구로 슈퍼테스트(supertest)를 자주 사용한다고 보면 된다. GitHub - visionmedia/su..

category_image
인파_
2022.01.22
(0)
Testing/JEST

[JEST] 📚 테스트에 유용한 함수 - only() / skip() / describe() / it()

only() / skip() 테스트 코드를 디버깅할 때 유용한 함수 이다. 테스트 파일 안에 테스트 함수들 중에서 하나만 실패했을 경우, 그 함수만 단독으로 실행해보고 싶을 때가 있을 것이다. 그럴 때는 해당 테스트 함수 뒤에 .only() 라고 붙여 주면 Jest Runner는 해당 테스트 파일을 실행할 때 .only() 가 붙은 함수만 실행해준다. test.only("run only", () => { // 이 테스트 함수만 실행됨 }); test("not run", () => { // 실행 안됨 }); skip() 은 only() 와 반대로 작동한다고 보면 된다. 어떤 함수만 빼고 실행해보고 싶을 때, 해당 테스트 함수에 skip() 을 붙여주면 Jest Runner는 해당 함수를 제외하고 다른 테스..

category_image
인파_
2022.01.21
(0)
Testing/JEST

[JEST] 📚 테스트 before / after 처리하기

before / after 테스트를 작성하다보면 모든 테스트 함수에서 공통적인 로직이 필요할 때가 있다. 기본적으로 테스트 mock 함수는 상태가 유지되는 속성이 있기 때문에, 테스트에 쓰인 데이터가 그대로 남아있다. 따라서 다음 테스트를 진행할때 이전에 쓰였던 mock 함수를 또 쓴다고 하면, 기존의 데이터때문에 결과가 이상해 질 수 있다. before / after 이라는 말은, 테스트 하기 전 / 한 후에 데이터 설정 혹은 정리를 위해 쓰인다는 개념에서 비롯된 것이다. beforeAll() / afterAll() beforeAll() , afterAll() 은 맨 처음과 맨 끝에 딱 한 번씩만 호출 하게 설정한다. 대표적인 사용 사례로, 데이터베이스에 접속할 필요한 연결(Connection) 객체를..

category_image
인파_
2022.01.21
(0)
Testing/JEST

[JEST] 📚 테스트 커버리지 (Test Coverage)

테스트 커버리지 테스트 커버리지 (test coverage) 란, 전체 코드 중 어떤 부분이 테스트 되고 어떤 부분이 테스트 되지 않았는지를 비율을 알려주는 기능이다. package.json에 커맨드로 coverage 를 다음과 같이 넣어주어 사용해보자. $ npm run coverage 테스트 결과와 함께 표가 하나 출력된다. 표의 열을 보면 각각 File (파일과 폴더 트리) % Stmts (구문 비율) % Branch (if문 등의 분기점 비율) % Func (함수 비율) % Lines (코드 줄 수 비율) Uncovered Line #s (커버되지 않은 줄 위치) 로 이우러져 있다. 퍼센티지가 높을 수록 많은 코드가 테스트되었다는 뜻이다. 여기선 명시적으로 테스트하고 require한 코드만 커버리..

category_image
인파_
2022.01.21
(0)
Testing/JEST

[JEST] 📚 모킹 Mocking 정리 - jest.fn / jest.mock /jest.spyOn

Mocking 원리 mocking이란 (mock = 모조품) 뜻 그대로 받아드리면 된다. 즉 테스트하고자 하는 코드가 의존하는 function이나 class에 대해 모조품을 만들어 '일단' 돌아가게 하는 것이다. 한마디로, 단위 테스트를 작성할 때, 해당 코드가 의존하는 부분을 가짜(mock)로 대체하는 기법을 말한다. 왜 가짜로 대체하는가? 테스트 하고싶은 기능이 다른 기능들과 엮여있을 경우(의존) 정확한 테스트를 하기 힘들기 때문이다. 예를들어 request body에 사용자의 id와 password를 넣어서 post요청을 보내면 컨트롤러에서 정보를 추출한 후 데이터베이스에 넣어주는 단위테스트를 하고 싶다고 하자. 컨트롤러는 라우터에서 응답을 보내는 미들웨어를 특별히 부르는 말이다. 그냥 함수다. 데..

category_image
인파_
2022.01.21
(0)
Testing/JEST

[JEST] 📚 비동기 코드 테스트 방법

콜백 테스트 비동기 메소드는 이벤트 루프로 인해 나중에 처리되기 때문에, 비동기의 결과를 검증 하기위해선 콜백에 expect() 를 사용해야 한다. 여기서 중요한건 done 이다. done 은 Jest Runner에게 명시적으로 이 테스트 함수는 비동기 코드를 테스트 하니 콜백 함수가 호출되는지도 좀 봐주라고 알려주는 역할을 한다. 따라서 비동기 함수를 검증하려 할때 결과를 콜백 함수로 받는다면, 콜백 함수 인자에 done 을 써주고, done() 을 호출해서 끝내야 한다. // 테스트할 함수 : 0.1초 뒤에 콜백함수를 실행하는 함수 function fetchUser(id, cb) { setTimeout(() => { console.log("wait 0.1 sec."); const user = { id..

category_image
인파_
2022.01.20
(0)
Testing/JEST

[JEST] 📚 유용한 Matcher 함수 종류 모음

JEST Matcher 정리 Jest는 다른 방법으로 값을 테스트 하도록 matcher 라는 것을 사용한다. matcher란 '이거 맞아?' 라고 물어보는 메서드리고 보면 된다. 기대한 값이 실제 반환된 값과 일치하는 지를 확인하는 작업을 일컫는다. 이번 포스팅에는 JEST에서 자주 쓰이는 matcher 함수 핵심만 꼽아 정리하는 시간을 가져 볼 것이다. 모든 matcher를 확인해보고 싶다면 expect에 대한 api 상세서 참고하자. Jest - Expect - 테스트를 작성할 때 값이 특정 조건을 충족하는지 확인해야 하는 경우가 많습니다. runebook.dev [ 테스트할 함수 ] // user.js // 테스트할 함수 function getUser(id) { return { id, email: ..

category_image
인파_
2022.01.20
(0)
Testing/JEST

[JEST] 📚 JEST 소개 & 기본 사용법 정리

JEST 란? Jest는 페이스북에서 만들어서 React와 더불어 많은 자바스크립트 개발자들로 부터 좋은 반응을 얻고 있는 테스팅 라이브러리다. 출시 초기에는 프론트앤드에서 주로 쓰였지만 최근에는 백앤드에서도 기존의 자바스크립트 테스팅 라이브러리를 대체하고 있다. Jest 이전에는 자바스크립트 코드를 테스트하라면 여러가지 테스팅 라이브러리를 조합해서 사용하곤 했었다. 예를 들어, Mocha나 Jasmin을 Test Runner로 사용하고, Chai나 Expect와 같은 Test Mathcher를 사용했으며, 또한 Sinon과 Testdouble 같은 Test Mock 라이브러리도 필요했었다. 이 라이브러리들은 굉장히 유사하지만 살짝씩 다른 API를 가지고 있었기 때문에, 여러 프로젝트에 걸쳐서 일하는 자..

category_image
인파_
2022.01.19
(0)