개발공부일지
NodeJS - TDD 본문
목차
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 |