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

bemodesty306님의 프로필 이미지
bemodesty306

작성한 질문수

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

데이터베이스 모킹하기

Post controller test 질문입니다.

작성

·

160

0

 
exports.createPost = async (req, res, next) => {
  try {
    const post = await Post.create({
      content: req.body.content,
      img: req.body.url,
      UserId: req.user.id,
    });
///////////////////
    const hashtags = req.body.content.match(/#[^\s#]*/g);
    if (hashtags) {
      const result = await Promise.all(
        hashtags.map((tag) => {
          return Hashtag.findOrCreate({
            where: { title: tag.slice(1).toLowerCase() },
          });
        })
      );
/////////////
      await post.addHashtags(result.map((r) => r[0]));
    }
    res.redirect("/");
  } catch (error) {
    console.error(error);
    next(error);
  }
};
 
위 코드는 제가 post 라우터 unit test를 하기위해서
post를 생성하는 미들웨어를 controller로
분리한 코드입니다.
저기서 슬래시로 감싸진 부분을 어떻게 테스트를 해야할지 모르겠어서 질문드립니다.
또한
jest.mock("../models/post");
jest.mock("../models/hashtag");
const Post = require("../models/post");
const Hashtag = require("../models/hashtag");
로 모델을 mocking하고 시작하였는데
User.hasMany called with something that's not a subclass of Sequelize.Model
라는 테스트 에러가 나와서, 왜 user model에 대한 부분이
에러로 나오는지 이해가 가지 않아서 질문드립니다.
여기 저기를 주석 처리한 결과 위 4줄의 코드가 에러의 원인인 것 같아
질문드립니다.
 
 

답변 1

0

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

post와 hashtag를 모킹하셔서 User.hasMany(포스트) 부분에서 저 에러가 발생하는 것으로 보입니다.

저라면 저 부분을 별도의 함수로 뺀 뒤에 저 별도의 함수 전체를 모킹해서 테스트 진행했을 것 같습니다. 라이브러리를 직접 모킹하는 건 쉽지 않습니다.

bemodesty306님의 프로필 이미지
bemodesty306

작성한 질문수

질문하기