FrameWork
-
Jest - Module Function2 (mock implementations, mock Name)FrameWork/Jest 2023. 3. 9. 17:52
Mock Implementations 함수 전체를 대체 아직 구현이 안되어 있거나 내부 구현이 복잡하여 테스트를 하기 힘든 겨우 테스트를 위해 간단한 구현체를 만들어 해당 함수를 대체 jest.fn, mockImplementation을 사용하여 구현 jest.mock으로 mocking 하겠다고 지저하면, 실제 구현채가 가려지고 mock 구현체를 바라보게 된다. const foo = require("../../lib/foo"); jest.mock("../../lib/foo"); describe("Mock Implementations", () => { test("test jest fn", () => { const myMockFn = jest.fn((callback) => callback(null, true)..
-
Jest - Mock Function1 (모듈 mocking jest.fn( ), jest.mock( ))FrameWork/Jest 2023. 3. 9. 16:08
직접 작성한 모듈 모킹 실제 구현 코드1 messageService.js module.export = function sendEmail(email, message) { /* 이메일 보낸는 코드 */ }; module.export = function sendSMS(phone, message) { /* 문자를 보내는 코드 */ }; userService.js const { sendEmail, sendSMS } = require("./messageService"); exports.register = function register(user) { /* DB에 회원 추가 */ const message = "회원 가입을 환영합니다"; sendEmail(user.email, message); sendSMS(user...
-
Jest - beforeEachFrameWork/Jest 2023. 3. 6. 17:20
BeforeEach 여러개의 테스트에 공통된 code가 있다면 beforeEach안에 넣어서 반복을 줄일수 있다. Jest 파일 구조 위 구조에서 4개의 test case에서 공통되는 코드들이 있다면 beforeEach라는 곳에 넣어 주면 모든 test들이 실행 되기 전에 beforeEach안에 들어 있는 것이 먼저 실행되고 그 다음에 그안에 들어 있는 test들이 각각 실행이된다. 혹시 특정 describe안에만 들어있는 것이 있다면 해당 describe안에 beforeEach를 넣어 줘도 된다. beforeEach(() => { req = httpModcks.createRequest(); res = httpMocks.createResponse(); next = null; }); 현재 위 코드에서 be..
-
Jest - create( ) - node-mock-httpFrameWork/Jest 2023. 3. 6. 16:45
product.create( ) 아직 저장할 Product 데이터를 넣어 주지 않았기 때문에 실제로 db에 저장할 data를 넣어준다. 몽구스 모델을 이용한 데이터 저장 const product = require('../models/Product'); //product.create(); product.create(req.body); 위와 같이 req 객체를 이용해서 요청에 들어온 body를 create메소드에 인자로 넣어줘서 데이터베이스에 저장해준다. 그렇기 때문에 단위 테스트에서도 req객체가 필요하다 그렇다면 어떻게 이 req객테를 단위테스트에서 이용할까? node-mock-http 모듈이용 const httpModcks = require("node-mocks-http"); let req = http..
-
Jest - TDD 개발 방식 순서FrameWork/Jest 2023. 3. 6. 15:39
TDD 개발방식 1. 해야할일 정의 2. 단위 테스트 작성 - 실제 코드 작성전에 test case를 작성한다. 3. 테스트 코드에 대응하는 실제 코드작성 - test case가 성공(passed)될 수 있게 실제 코드를 작성한다. const productController = require("../../controller/products"); describe("Product Controller Create", () => { it("should have a createProduct function", () => { expect(typeof productController.createProduct).toBe("function"); }); }); product 인스턴스 data를 database에 저장하기 ..
-
단위 테스트(Unit Test)에 대하여FrameWork/Jest 2023. 3. 6. 14:05
단위(Unit) 테스트란? 단위 테스트는 개발자가 수행하고 자신이 개발한 코드 단위(일명 모듈, 구성요소)를 테스트한다. 소스코드의 개별 단위를 테스트하여 사용할 준비가 되었는지 확인하는 테스트 방법이다. 개발 라이프 사이클 초기 단계에서 버그가 식별되므로 버그 수정 비용을 줄이는데 도움이 된다. 간단하게 생각하면 메소드를 테스트하는 또다른 메소드라고 생각하면 된다. 단위(Unit)테스트의 조건 1. 독립적이어야 하며, 어떤 테스트도 다른 테스트에 의존하지 않아야 한다. 2.격리 되어야 한다. Ajax, Axios, LocalStorage등 테스트 대상이 존재하는 것을 다른 것으로 대체해야 한다. 단위(unit) 테스트와 통합(integration) 테스트 단위 테스트 먼저 단위(Unit) 테스트는 te..
-
express - Middleware(미들웨어)1FrameWork/Express.js 2023. 2. 15. 11:42
Middleware 미들웨어(middleware)는 그 이름에서 알 수 있듯이 중간단계 역할을 하는 존재이다. express의 middleware를 사용해서 요청과 응답사이에 express 자체에 있는 기능외에 추가적인 기능을 넣어줄 수 있다. express 자체 미들웨어를 사용해도 되고 다른 사람이 만들어 놓은 미들웨어를 npm을 통해 다운 받아 사용해도 된다. express 사용법에서 핵심은 '미들웨어'에 있다고 할 정도로 미들웨어는 express에서 중요한 역할을 한다. 미들웨어에는 인증 수행, 예외처리,세션처리,라우터 등 많은 종류가 있다. app.use( ) 미들웨어는 app.use() 메서드를 통해 사용한다. app.set( )과의 차이점은 app.set( )은 전역으로 사용된다는 점이다. c..
-
Nest.js Interceptors 사용하기FrameWork/Nest.js 2022. 8. 7. 16:09
Interceptor의 역할 Nest.js에서 AOP 패턴의 특징을 차용한 것으로 예) // A -> B -> C -> D // A -> C -> D // A -> E -> F -> D -> G // Z -> A -> X -> D 언 뜻 보면 각 4개의 router에 공통점이 없는 듯이 보이지만, 잘 찾아보면 A가 먼저 실행되고, 끝 부분에는 D가 실행된다는 공통점이 있다. 다시 말해 4개의 router 모두다 middleware A와 D는 공통적으로 거쳐간다는 것 을 알 수 있다. 이런 A와 D와 같은 middleware들을 한번 정의해서 필요 할때마다 쓸 수 있도록 재 사용성을 갖도록 하는 것이 Intercepter의 존재의 이유이자 역할이다. Interceptor의 실행 순서 middleware 1..