Jest 테스트 코드 작성 관련 질문
586
작성한 질문수 4
타입스크립트로 Jest 테스트 코드를 작성해보고 있는데요.
유닛테스트를 작성하여, 직접 작성한 미들웨어에서 next() 함수가 호출되는지 확인해보려고 합니다.
class-validator로 req.body가 number인지 검증하는 미들웨어이고,
테스트코드는 다음과 같습니다.
import 'reflect-metadata';
import { CreateCheckInDto } from '../check-in/create-check-in.dto';
import { validation } from './validation.middleware';
describe('validation middleware', () => {
it('simple test', () => {
const req: any = {
body: { cardId: '22' },
};
const res: any = {};
const next = jest.fn();
validation(CreateCheckInDto)(req, res, next);
expect(next).toBeCalledTimes(1);
});
});
미들웨어 코드는 다음과 같습니다(class validator로 req.body를 검증하는 코드입니다).
import { plainToInstance } from 'class-transformer';
import { validate, ValidationError } from 'class-validator';
import { NextFunction, Request, Response, RequestHandler } from 'express';
export function validation(type: any): RequestHandler {
return (req: Request, res: Response, next: NextFunction) => {
validate(plainToInstance(type, req.body)).then(
(errors: ValidationError[]) => {
if (errors.length > 0) {
res.redirect('redirect');
} else {
console.log('nextttttttttttttttt');
next();
}
},
);
};
}
console.log('nextttttttttttttttt');
이게 콘솔로그로 찍히는 걸보면 next()부분까지 도달하는 것 같은데 테스트 결과는 기대와 다르게 아래와 같습니다.
console.log
nextttttttttttttttt
at src/middleware/validation.middleware.ts:12:19
FAIL src/middleware/validation.middleware.spec.ts
validation middleware
✕ simple test (22 ms)
● validation middleware › simple test
expect(jest.fn()).toBeCalledTimes(expected)
Expected number of calls: 1
Received number of calls: 0
13 | validation(CreateCheckInDto)(req, res, next);
14 |
> 15 | expect(next).toBeCalledTimes(1);
| ^
16 | });
17 | });
18 |
at Object.<anonymous> (src/middleware/validation.middleware.spec.ts:15:18)
왜 received number of calls가 0이 나오는지 실마리를 찾지 못하여 질문으로 올립니다.
원인해결을 위한 키워드라도 실마리를 주신다면 정말 감사하겠습니다!
답변 1
0
비동기여서 그렇습니다. then보다 테스트가 먼저 끝납니다. 테스트가 프로미스가 끝나고 실행되도록 기다리는 방법이 핕요합니다.
return validate... 한 뒤에 await같은 것을 붙여서요.
리눅스 노드 설치시 패키지
0
162
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
907
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2281
2
a[title] 질문드립니다
0
376
1
리뉴얼 강의 및 공부 방법
0
583
1
jwt decode
0
1129
1
node.js 교과서 3판 질문드립니다
0
392
1
passport와 jwt
0
434
1
리뉴얼 강의
0
421
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
355
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
482
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
506
2
nunjucks res.render('error'); 작동을 안합니다.
0
512
1
질문있습니다.
0
348
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3536
1
수업자료는 어디있나요?
0
368
1
질문 있습니디
0
237
1
multer 사용시 file 외 name값은 못받나용?
0
417
1
코드 중복 부분 질문드립니다.
0
299
1
api 만드는 이유 질문드립니다.
0
288
1
Strategy의 done에 대해 질문드립니다.
0
367
1
안녕하세요 fs 권한 관련 질문드립니다
0
451
1
시퀄라이즈 연결질문...
0
500
2
res.setHeader vs res.cookie
0
1789
3





