테스트를 하는 이유
자신이 만든 서비스가 제대로 동작하는지 테스트해야 함
- 기능이 많다면 수작업으로 테스트하기 힘듦
- 프로그램이 프로그램을 테스트할 수 있도록 자동화함
- 테스트 환경을 최대한 실제 환경과 비슷하게 흉내냄
- 아무리 철저하게 테스트해도 에러를 완전히 막을 수는 없음
테스트를 하면 좋은 점
- 하지만 허무한 에러로 인해 프로그램이 고장나는 것은 막을 수 있음
- 한 번 발생한 에러는 테스트로 만들어두면 같은 에러가 발생하지 않게 막을 수 있음
- 코드를 수정할 때 프로그램이 자동으로 어떤 부분이 고장나는 지 알려줌
Jest 설치하고 실행해보기 (개발용)
npm i –D jest
- Nodebird 프로젝트를 그대로 사용함
routes 폴더 안에 middlewares.test.js 작성
- 테스트용 파일은 파일명에 test나 spec이 있으면 됨
- npm test로 test나 spec 파일들을 테스트함.
- 테스트를 아무것도 작성하지 않았으면 에러 발생(테스트 실패)
middlewares.test.js 작성하기
- test 함수의 첫 번째 인수로 테스트에 대한 설명
- 두 번째 인수인 함수에는 테스트 내용을 적음
- expect 함수의 인수로 실제 코드를, toEqual 함수의 인수로는 예상되는 결괏값을
- expect와 toEqual의 인수가 일치하면 테스트 통과
const { isLoggedIn, isNotLoggedIn } = require('./middlewares');
describe('isLoggedIn', () => { // 이런식으로 test를 모아둘 수 있음
const res = {
status: jest.fn(() => res),
send: jest.fn(),
};
const next = jest.fn();
test('로그인 되어있으면 isLoggedIn이 next를 호출해야 함', () => {
const req = {
isAuthenticated: jest.fn(() => true),
};
isLoggedIn(req, res, next);
expect(next).toBeCalledTimes(1);
});
test('로그인 되어있지 않으면 isLoggedIn이 에러를 응답해야 함', () => {
const req = {
isAuthenticated: jest.fn(() => false),
};
isLoggedIn(req, res, next);
expect(res.status).toBeCalledWith(403);
expect(res.send).toBeCalledWith('로그인 필요');
});
});
describe('isNotLoggedIn', () => {
const res = {
redirect: jest.fn(),
};
const next = jest.fn();
test('로그인 되어있으면 isNotLoggedIn이 에러를 응답해야 함', () => {
const req = {
isAuthenticated: jest.fn(() => true),
};
isNotLoggedIn(req, res, next);
const message = encodeURIComponent('로그인한 상태입니다.');
expect(res.redirect).toBeCalledWith(`/?error=${message}`);
});
test('로그인 되어있지 않으면 isNotLoggedIn이 next를 호출해야 함', () => {
const req = {
isAuthenticated: jest.fn(() => false),
};
isNotLoggedIn(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
});
});
1. describe로 테스트 그룹화 가능
2. 미들웨어 테스트를 위해 req와 res를 가짜로 만들어주어야 함
- jest.fn으로 함수 모킹 가능
3. expect에는 toEqual 말고도 많은 메서드 지원
- toBeCalledWith로 인수 체크
- toBeCalledTimes로 호출 회수 체크
'Node.js' 카테고리의 다른 글
CORS 에러 이해하기 (0) | 2021.01.11 |
---|---|
API 서버에서 사용량 제한하기 (0) | 2021.01.11 |
Nodejs 호출 서버 만들기 (0) | 2021.01.10 |
Node에서 API 서버 만들기 (0) | 2021.01.08 |
multer 사용해서 이미지 업로드 구현 (0) | 2021.01.06 |