인프런 커뮤니티 질문&답변

wocl00님의 프로필 이미지
wocl00

작성한 질문수

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

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

작성

·

166

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);
  }
};
ㅎㅎㅎ
ㅎㅎㅎ

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

await addFollowing(req.res,next);

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

await addFollowing(req, res, next);

wocl00님의 프로필 이미지
wocl00

작성한 질문수

질문하기