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