Node.js 심화 1주차_5_Integration Test
2022.12.29 - [JavaScript] - Node.js 심화 1주차_5
2022.12.29 - [JavaScript] - Node.js 심화 1주차_5_Unit Test
Layered Architecture Pattern 테스트 코드(통합테스트)
📌 supertest 이용
계층별 단위 테스트를 구현한 것과 다르게,
Http Method, API의 URL을 이용하여 테스트를 진행
📌 Sequelize DB 설정
📄 config/config.json
"development": {
"username": "root",
"password": "비밀번호",
"database": "layered_architecture_pattern_db",
"host": "엔드포인트",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "비밀번호",
"database": "layered_architecture_pattern_test_db",
"host": "엔드포인트",
"dialect": "mysql",
"logging": false
},
단순하게 이름만 test_db로 변경
📌 test DB 환경 설정(Terminal)
오류 발생
node_env=test : the term 'node_env=test' is not recognized as the name of a cmdlet, function, script file, or operable program. check the spelli ng of the name, or if a path was included, verify that the path is correct and try again. at line:1 char:1 + node_env=test npx sequelize db:create + ~~~~~~~~~~~~~ + categoryinfo : objectnotfound: (node_env=test:string) [], commandnotfoundexception + fullyqualifiederrorid : commandnotfoundexception
아래 명령어와 script추가로 해결
npm install -g win-node-env
# test 환경에 설정값을 이용해 DB를 생성합니다.
NODE_ENV=test npx sequelize db:create
# test 환경에 설정값을 이용해 Table을 생성합니다.
NODE_ENV=test npx sequelize db:migrate
📄 package.json
"scripts": {
"start": "SET NODE_ENV=production && node server",
}
📄 app.js
module.exports = app;
📌 GET Method 통합 테스트 (Integration Test)
📄 __tests__/integration/posts.integration.spec.js
describe('Layered Architecture Pattern, Posts Domain Integration Test', () => {
test('GET /api/posts API (getPosts) Integration Test Success Case, Not Found Posts Data', async () => {
const response = await supertest(app)
.get(`/api/posts`) // API의 HTTP Method & URL
// API의 Status code가 200번이다
expect(response.status).toEqual(200);
// API의 Response 데이터는 { data: [] }
expect(response.body).toEqual({data:[]});
});
}
📌 Terminal
npm run test:integration
📌 POST Method 통합 테스트 (Integration Test)
📄 __tests__/integration/posts.integration.spec.js
test('POST /api/posts API (createPost) Integration Test Success Case', async () => {
// { nickname, password, titil, content }
const createPostBodyParams = {
nickname: "Nickname_Succese",
password: "Password_Succese",
title: "Title_Success",
content: "Content_Success",
};
const response = await supertest(app)
.post('/api/posts')
.send(createPostBodyParams);
// Http status Code가 201로 전달되는가
expect(response.status).toEqual(201);
// 원하는 데이터로 전달되는가? { postId, nickname, title, content, createdAt, updatedAt }
expect(response.body).toMatchObject({
data: {
postId: 1,
nickname: createPostBodyParams.nickname,
title: createPostBodyParams.title,
content: createPostBodyParams.content,
createdAt: expect.anything(),
updatedAt: expect.anything()
}
});
});
test('POST /api/posts API (createPost) Integration Test Error Case, Invalid Params Error', async () => {
const response = await supertest(app)
.post('/api/posts')
.send()
// Http Status Code가 400번으로 반환
expect(response.status).toEqual(400);
// { errorMessage: "InvalidParamsError" }의 형태로 데이터가 전달
expect(response.body).toEqual({
errorMessage: "InvalidParamsError"
})
});
post성공 & 실패(error)
📌 git repo
godee95/layered-architecture-pattern-tests: layered-architecture-pattern-tests (github.com)
'JavaScript' 카테고리의 다른 글
Node.js 3차 미니프로젝트 로그인 & 로그아웃 (0) | 2023.01.02 |
---|---|
3차 미니프로젝트_회원가입 (0) | 2022.12.30 |
Node.js 심화 1주차_5_Unit Test (1) | 2022.12.29 |
Node.js 심화 1주차_5 (0) | 2022.12.29 |
Node.js 심화 1주차_4_과제 (0) | 2022.12.28 |