-
TIL 190일 - node.js 테스트 코드...공부/JavaScript 2022. 7. 7. 23:51
컨트롤러
export const hasIssueableCoupon = async (_: any, args: any) => { const { benefitCompanyID }:{benefitCompanyID:string} = args if(!benefitCompanyID){ throw Error("invalid argument exception"); } return await CouponService.hasIssueableCouponByBenefitCompanyId(benefitCompanyID); }
서비스
export abstract class CouponService { public static async hasIssueableCouponByBenefitCompanyId(benefitCompanyID : string) { const list = await CouponRepository.findByBenefitIdAndLessThanExpiredAtAndUserIdIsNull({benefitCompanyID, expiredAt:new Date().toISOString()}); return list.length > 0; } }
레포지토리
export abstract class CouponRepository { public static async findByBenefitIdAndLessThanExpiredAtAndUserIdIsNull(args: { benefitCompanyID: string; expiredAt: string; }) { const { benefitCompanyID, expiredAt } = args; return await DB.Coupon.findAll({ limit: 1, where: { benefitCompanyID, userID: { [Op.eq]: null, }, expiredAt: { [Op.gte]: expiredAt, }, }, }); } }
위에처럼 짜봤다.
얼추 스프링이랑 비슷하게 보인다.
다만 sequelize를 사용하다 보니 domain(DDD 같은 도메인 말고 그냥 @Entity 달려있는 놈)을 작성하기가 애매하다고 생각이 들었다.
그리고 서비스나 컨트롤러 같은 경우엔 sinon?이라는 놈인가 아무튼 모킹해서 좀 쓰면 될 거 같은데 poersistence 부분은 어떻게 테스트하지...? 생각이 들었다.
찾아보니까 sequelize-mock이라는 놈이 있다.
https://sequelize-mock.readthedocs.io/en/stable/
Home - Sequelize Mock
Sequelize Mock is a mocking library for Sequelize. Mock objects created with this library are meant for use in testing code that relies on Sequelize Models. Code does not rely on any database connections and can therefore be easily used in unit and integra
sequelize-mock.readthedocs.io
그리고 sequelize typescript 라는 놈을 사용하면 spring과 매유 유사하게 사용할 수 있는 것으로 보인다. 음음
어오 이거 운동이랑 공부랑 같이 하니까 다 하고나면 기본 12시구만...
내일은 금요일이니까 깔짝만 하자...
그리고 이번엔 기존 프로젝트에서 진행하는게 아니라 새로운 레포 파서 해야긌다 ㅇㅇ
'공부 > JavaScript' 카테고리의 다른 글
TIL 195일 - sinon.js, chai, mocah (0) 2022.07.12 TIL 194일 - sequelize mock (0) 2022.07.11 TIL 189일 - node.js unit test 툴 (0) 2022.07.07 TIL 136일 - next.js header (0) 2022.05.14 TIL 110일 - node.js cheerio (0) 2022.04.19