분류 전체보기
-
TI 197일 - node에서 service layer unit test공부/JavaScript 2022. 7. 14. 21:03
로직이 너무 단순하다 보니 어제랑 별 다를게 없다. import sinon from 'ts-sinon'; import CouponModel from '../../layered/model/Coupon'; import CouponService from '../../layered/service/CouponService'; import { assert } from 'chai'; describe('쿠폰 service', async () => { afterEach(() => { sinon.restore(); }); it('발행 가능한 쿠폰이 있으면 true를 반환한다', async () => { sinon.mock(CouponModel).expects('getItems').returns([""]); assert.e..
-
TIL 196일 - node에서 presentation 레이어 유닛 테스트 구현해보기공부/JavaScript 2022. 7. 13. 21:14
시간이 좀 걸리긴 했는데 아래처럼 구현이 가능했다. Couponservice 안에는 hasIssuableCoupons 메서드가 있고, 이 값이 true, false인 경우를 mock해서 테스트를 진행해 봤다. 근데 조금 맘에 안 드는 부분은 에러가 발생하는 부분인데, 찾아보면 assert.throw(fn, Error, errorMessage) 이런 식으로 사용 하라는데 아무리 해봐도 안된다... 근데 다른 사람도 안 돼서 그런지 다른 방법으로 작성한 코드를 발견했다...! 아무튼 완성...! 내일은 service layer 코드 작성을 해봐야 겠다. import sinon from 'ts-sinon'; import CouponService from '../../layered/service/CouponSe..
-
TIL 195일 - sinon.js, chai, mocah공부/JavaScript 2022. 7. 12. 21:44
sinon.js란? js를 위한 스텁, 목, 스파이 기능을 제공하는 테스트 툴이다. stub 요렇게 사용할 수 있다. (당연히 실패함) import { assert } from "chai"; import { stub } from "sinon"; describe("tes1t", () => { it("test11", async () => { const stubAnyFunction = stub(); stubAnyFunction.returns(false); assert.equal(true, stubAnyFunction()); }); }); Mock mock을 쓰면 아래처럼도 쓸 수 있다. 근데 이상한게 UserModel을 다른 파일에 두면 에러가 발생한다. 음... 뭔가 export랑 관련된 이슈가 있는 거 같..
-
TIL 194일 - sequelize mock공부/JavaScript 2022. 7. 11. 22:03
새로운 Sequelize 프로젝트 일단은 다른 스택들은 제외하고 테스트를 해보는 게 좋을 거 같아서, 새로운 sequelize 프로젝트를 만들었다. import express from "express"; import { DataTypes, Sequelize } from "sequelize"; const app = express(); const port = 3000; const sequelize = new Sequelize("node_test", "user_name", "password", { host: "localhost", dialect: "postgres", }); const User = sequelize.define( "User", { // Model attributes are defined her..
-
TIL 193일 - jpa entityManager공부/Java와 Spring 2022. 7. 10. 19:47
Entity를 관리하는 클래스 내부에 persistence context가 존재한다고 함 이를 통해 엔티티를 관리 전에 여러 데이터 소스를 만들 때 사용했던 코드인데, em.setDataSource 라는 코드가 존재하는 것을 보니 엔티티매니져를 데이터 소스 별로 정의하여, 각 datasource confg마다 사용을 하게 하는 듯하다. @Bean public LocalContainerEntityManagerFactoryBean secondEntityManager() { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(secondDatasource()); em.se..
-
TIL 191일 - EB worker공부/개발 전체적인 2022. 7. 8. 23:11
EB를 만들 때 worker 환경으로 만들 수 있다. worker 환경은 어떤 SQS를 컨슘하는 서버라고 생각하면 될 듯 하다. 작업자 환경인 worker는 200 ok를 응답하면, DeleteMessage를 호출하여 SQS에 있는 메시지를 삭제한다(컨슘한다) 200 ok가 아닌 응답을 할 경우, EB는 ErrorVisibilityTimeout 기간이 경과할 때 까지 대기한 후 메시지를 대기열에 다시 넣는다.(이 기간동안의 메시지가 이동중인 메시지 인 듯) 최대 재시도 횟수 – Elastic Beanstalk에서 메시지를 배달 못한 편지 대기열로 이동하기 전에 Amazon SQS 대기열로 메시지 전송을 시도하는 최대 횟수를 지정합니다. 기본값은 10입니다. 1 ~ 100을 지정할 수 있습니다. 참고글 h..
-
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..