inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

Jest 테스트 코드 작성 관련 질문

586

Highballs

작성한 질문수 4

0

타입스크립트로 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이 나오는지 실마리를 찾지 못하여 질문으로 올립니다.

원인해결을 위한 키워드라도 실마리를 주신다면 정말 감사하겠습니다!

jest Sequelize mysql mongodb nodejs

답변 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