FrameWork/Jest
-
Jest - Testing2FrameWork/Jest 2023. 3. 20. 11:19
실제 구현코드 user.service.ts async updateUser(id: number, userUpdateRequestDto: UserUpdateDto) { const userId = await this.usersRepository.findOne({ where: { id } }); if (!userId) { throw new BadRequestException('존재하지 않는 회원번호 입니다.'); } const { name, nickName, memo } = userUpdateRequestDto; const user = this.usersRepository.create({ name, nickName, memo }); return await this.usersRepository.update(id,..
-
Jest - Jest Object1 (jest.spyOn( ))FrameWork/Jest 2023. 3. 10. 15:43
Jest Object jest.spyOn( ) mocking에는 스파이(spy)라는 개념이 있다. 테스트를 작성할 때, 어떤 객에에 속한 함수의 구현을 가짜로 대체하지 않고, 해당 함수의 호출 여부와 어떻게 호출 되었는지만 알아내야 할 때가 있다. 이럴 때, Jest에서 제공하는 jest.spyOn(object,methodName)함수를 사용하면 된다. 실제 구현 함수1 obj.js const calculator = { add: (a, b) => a + b, }; module.exports = calculator; obj.test.js const calculator = require("../../lib/obj"); describe("Jest Object jest.spyOn() ", () => { test..
-
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..