jest 연습하기

몽슈뜨·2023년 1월 4일
0

TIL

목록 보기
30/70
post-thumbnail

order_repository.unit.spec.js

// 🥫 data Access Layer
// 데이터 액세스 계층은 쿼리를 수행하여 데이터베이스와 상호 작용합니다. 제가 사용하고 있는 Sequelize는 Data Access Layer의 역할의 일부를 대체해줍니다.
// sequelize를 사용하지 않으면 아래와 같이 data Access Layer를 담당하는 파일에 쿼리문을 모아서 필요할 때 service 계층에서 호출해서 사용합니다.

// const { Manager } = require('.././models');

// Manager에 들어가야 할것들
// 사장님 회원가입, 로그인, 포인트 확인 find create / point

class ManagerRepository {
  constructor(managerModel) {
     this.managerModel = managerModel;
  } 

  findManager = async () => {
    const findManager = await this.managerModel.findAll();
    return findManager;
  }

findCertainManager = async (loginId) => {
    try {
      const findCustomer = await this.managerModel.findOne({ where: { loginId } });
      return findCustomer;
    } catch (error) {
      return error;
    }
  };

createManager = async (loginId,encryptedPassword,name) => {
    const createManagerdata = await this.managerModel.create({

      loginId,
      loginPw: encryptedPassword,
      name,
    });
    return createManagerdata;
  }

getMyPoint = async (id) => {
    const managerPoint = await this.managerModel.findOne({
      where: {
        id: id
      }
    });
    return managerPoint;
  };
  managerPointUpdate = async (point, id) => {
    const pointUp = await this.managerModel.update(
      {
        point: point
      },
      { where: { id: id } }
    )
    return pointUp
  }

}

module.exports = ManagerRepository;

manager_service.unit.spec.js

const ManagerService = require("../../services/manager.service.js");
const bcrypt = require('bcrypt');

let mockManagerRepository = {
  getMyPoint: jest.fn(),
  findCertainManager: jest.fn(),
  createManager: jest.fn(),
  updatePost: jest.fn(),
  deletePost: jest.fn(),
}

let managerService = new ManagerService();
// postService의 Repository를 Mock Repository로 변경합니다.
ManagerService.ManagerRepository = mockManagerRepository;

describe('Layered Architecture Pattern Manager Service Unit Test', () => {
  // 각 test가 실행되기 전에 실행됩니다.
  beforeEach(() => {
    jest.resetAllMocks(); // 모든 Mock을 초기화합니다.
  })

  test('Posts Service findAllPost Method', async () => {
    // TODO: 여기에 코드를 작성해야합니다.


  });



  test('loginId 정규식 형식 테스트', async () => {
    const idReg = /^[a-zA-Z0-9]{3,}$/;
    const loginId = "이드보라"
    let testId =''

    if ( !idReg.test(loginId)){
      return testId = loginId
    }

    expect(loginId).toEqual(testId)
    // expect(testId).toHaveBeenCalledTimes(1);
    // expect(testId).toHaveBeenCalledWith()
  });

    test('loginPw 형식 테스트', async () => {
    const pw = "1234"
    let testPw =0

    if ( !pw.length < 4){
      return testPw = pw
    }

    expect(pw).toEqual(testPw)
    // expect(testId).toHaveBeenCalledTimes(1);
    // expect(testId).toHaveBeenCalledWith()
  });




  test('회원가입 통과', async () => {
    // TODO: 여기에 코드를 작성해야합니다.
    const createManagerParam = {
      loginId :'asdfasdf',
      encryptedPassword :12341234,
      name:'성민섭',
    }

    const createManagerValue = {
      loginId : createManagerParam.loginId,
      encryptedPassword : createManagerParam.encryptedPassword,
      name : createManagerParam.name,
      createdAt: new Date('07 October 2011 15:50 UTC'),
      updatedAt: new Date('07 October 2011 15:50 UTC')
    }
    mockManagerRepository.createManager = jest.fn(()=> {
      return createManagerValue
    })

    const createManagerData = await mockManagerRepository.createManager(
      createManagerParam.loginId,
      createManagerParam.encryptedPassword,
      createManagerParam.name
    )

    expect(createManagerData).toEqual(createManagerValue)
    expect(mockManagerRepository.createManager).toHaveBeenCalledTimes(1);
    expect(mockManagerRepository.createManager).toHaveBeenCalledWith(
      createManagerParam.loginId,
      createManagerParam.encryptedPassword,
      createManagerParam.name
    )



  });
});
profile
개발자되면 맥북사줄께

0개의 댓글