inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

테스트 파트의 user.test.js 오류가 나는데 도저히 이유를 모르겠습니다.

208

wocl00

작성한 질문수 7

0

jest.mock("../models/user"); 
// require을 통해 가지고 오는 객체들을 jest.mock으로 복사한다. 

const User = require("../models/user"); 
const {addFollowing} = require("./user"); 


describe("addFollowing", ()=>{
    const req = {
        user : {id : 1},
        params : {id : 2},
    };
    const res = {
        status : jest.fn(()=>res),
        send : jest.fn(),
    }; 
    const next = jest.fn();
    
    const console = {
        error : jest.fn(),
    }; 
    
    test("사용자를 찾아 팔로잉을 추가하고 success를 응답해야 함", async()=>{
        User.findOne.mockReturnValue(Promise.resolve({
            addFollowing(id) {
                return Promise.resolve(true); 
            }
        })); 

        await addFollowing(req,res,next); 
        expect(res.send).toBeCalledWith('success'); 
    }); 

    test("사용자를 못 찾으면 res.status(404).send(no user)를 호출해야 함", async ()=>{

        User.findOne.mockReturnValue(Promise.resolve(null)); 
        
        await addFollowing(req.res,next); 
        expect(res.status).toBeCalledWith(404); 
        expect(res.send).toBeCalledWith('no user'); 

    }); 
    
    test("DB에서 에러가 발생하면 next(error) 호출한다.", async()=>{
       
        const err = "테스트용 에러"; 

        User.findOne.mockReturnValue(Promise.reject(err)); 

        await addFollowing(req,res,next); 
       expect(console.error).toBeCalledWith(err); 
        expect(next).toBeCalledWith(err); 
    });
}
위의 코드는 user.test.js 코드입니다.
user.js 코드는 깃헙에 올려주신 코드를 복사했습니다.
console.error()를 테스트 하기 위해 가짜객체도 만들었습니다.
test("사용자를 못 찾으면 res.status(404).send(no user)를 호출해야 함"
이 부분에서 Promise.resolve(null)을 했는데 테스트가 왜 try{} 부분이 아니라 catch{} 부분으로
가는 걸까요??
catch{} 부분에서 console.error(err) 부분도 처리가 안되고 , next(err) 부분도 테스트가 안됩니다.
next(err)에서 next가 함수가 아니라고 타입 에러가 뜨는데 왜일까요?
콘솔창의 출력은 다음과 같습니다.
혹시나 하는 마음에 user.js 코드도 아래에 올리겠습니다.
const User = require('../models/user');

exports.addFollowing = async (req, res, next) => {
  try {
    const user = await User.findOne({ where: { id: req.user.id } });
    if (user{
      await user.addFollowing(parseInt(req.params.id, 10));
      res.send('success');
    } else {
      res.status(404).send('no user');
    }
  } catch (err{
    console.error(err);
    next(err);
  }
};
ㅎㅎㅎ
ㅎㅎㅎ

jest nodejs mongodb mysql Sequelize

답변 1

0

제로초(조현영)

await addFollowing(req.res,next);

. 오타입니다. 점 대신 콤마

await addFollowing(req, res, next);

리눅스 노드 설치시 패키지

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