Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발공부일지

NodeJS - TDD 본문

NodeJS

NodeJS - TDD

보람- 2023. 10. 25. 18:14

 


목차

1. TDD

2. jest

3. 단위테스트

4. 통합테스트

5. module


 

 

 

1. TDD

- 테스트 주도 개발 ( Test-Driven Development)
- 코드를 작성하기 전에 해당 코드를 테스트하는 테스트 케이스를 작성하는 개발 방법론

 

 

 

 

 

2. Jest

 

https://jestjs.io/docs/getting-started


- meta가 만든 테스트 프레임워크로, 주로 TDD 및 단위 테스트에 사용

- jest는 테스트 작성을 쉽게 만들어주며, 코드의 품질을 높이고 버그를 예방하는 데 도움

npm init -y
npm install -D jest
npm install express

 

- package.json 에서 수정

"scripts": {
    "test": "jest",
    "start": "node index",
    "dev":"node index"
  },

- npm run test 를 하면 test.js 파일을 실행시켜줌

 

 

 

 

 

 

 

3. 단위테스트


- 단위 테스트는 함수 또는 메서드에 대한 테스트를 수행하는 것을 의미

- 단위 테스트를 통해 개발자는 각 함수가 예상대로 동작하는지 확인하고 버그를 미리 찾을 수 있다!

- 메서드 하나하나에 대한 테스트하는 영역

    - 예를들면 controller에서 create 메서드를 테스트하는!!

 

const UserService = require('./user.service')

describe('user Service', ()=>{

    let userService = null
    let User = {
        create:jest.fn()
    }

    beforeEach(()=>{
        userService = new UserService(User)
    })

    describe('createUser', ()=>{
        it('성공 부분',async ()=>{
            User.create.mockResolvedValue({id:'guniee',name:'boram'})
            const dto = {id:"guniee", pw:'1234', name:'boram'}
            const responseBody = await userService.createUser(dto)
            
            expect(User.create).toBeCalledWith(dto)
            expect(responseBody).toEqual({id:'guniee',name:'boram'})
        })

        it('실패 부분', async ()=>{
            User.create.mockRejectedValue(new Error('User Error'))
            const dto = {id:"guniee", pw:'1234', name:'boram'}
            expect(async ()=> await userService.createUser(dto) ).rejects.toThrowError('User Error')
        })
    })
})

 

 

 

 

 

4. 통합테스트


- 통합 테스트는 여러 단위의 코드가 함께 작동하는지를 확인하는 테스트

- 단위 테스트 이후에 시행되며, 모든 컴포넌트 또는 모듈이 함께 작동하는지 확인하는 역할

- 단위테스트가 모여 하나의 라우터가 완성됐다면 요청을 실제로 날려보는게 통합테스트
- Router 실행시켜서 내용을 확인하는 테스트

 

npm install -D supertest
const request = require("supertest");
const app = require("../app");
const {sequelize} = require("../src/entity");

beforeAll(async () => {
    // console.log(sequelize);
    await sequelize.sync({force: true});
});



describe("통합테스트 userController", () => {
    const body = {id: "guniee", name: "boram", pw: "123"};
    it("POST /users", async () => {
        const response = await request(app)
            .post("/users")
            .set("Content-Type", "application/json")
            .send(body);
        console.log(response.text);
        // expect(response.text).toBe("hello world");
    });
});





5. module

- class로 만들어서 controller()에 service를 , service()에는 entity를 주입하는 의존성주입의 코드를 작성해서

- require에 파일자체를 의존하지않고 분리해서 module에서 사용

const UserService = require("./user.service");
const UserController = require("./user.controller");
const {User} = require("../entity");

const userService = new UserService(User);
const userController = new UserController(userService);

module.exports = {
    userController,
};

 

 

※ 이슈사항 1

 thrown: "Exceeded timeout of 5000 ms for a test.
    Add a timeout value to this test to increase the timeout, if this is a long-running test.
    See https://jestjs.io/docs/api#testname-fn-timeout."

 


※ npm install -D jest

  "devDependencies": {
    "jest": "^29.7.0"
  },
  
  "dependencies": {
    "express": "^4.18.2"
  }

 

 

 

'NodeJS' 카테고리의 다른 글

NodeJS - File Upload  (0) 2023.10.30
NodeJS - KAKAO LOGIN (추가)  (0) 2023.10.26
NodeJS - DTO  (0) 2023.10.24
NodeJS - ORM, Sequelize, User CRUD  (1) 2023.10.23
NodeJS - RESTful API, 회원가입 (Front, Back 분리)  (1) 2023.10.20