본문 바로가기

Project

(27)
20.03.27 ShareBook TIL token을 확인하고 유저가 책을 등록하는 함수를 test case로 작성하기 실제 로직이 돌아가는 형태는 유저가 로그인을 하면 토큰이 쿠키에 담겨 보내지며 클라이언트에서 작성된 내용을 request로 보내지고 server에서는 토큰을 verify 해서 유효한 토큰인지를 확인한 뒤 데이터베이스에 담긴다. test에서는 beforeAll로 먼저 토큰을 생성해준다. import 'dotenv/config'; // 이걸 불러와서 실제 로직에서 사용하는 .env가 작동함 beforeAll(done => { request(app) .post('/users/signin') .send({ email: 'test_123@gmail.com', password: 'test_password', }) .end((err, re..
20.03.26 ShareBook TIL 오늘의 Test Case 작성 유저가 자신의 책을 등록하는 로직을 테스트로 만들어 보았다. 유저가 책을 등록하기 위해서는 먼저 로그인을 하고 토큰을 발급받은 다음 토큰의 유효 검사를 통과하면 책을 등록할 수 있기 때문에 먼저 token을 발급하고 확인하는 테스트가 먼저 실행되어야 할거라고 생각했다. 인증 관련 테스트는 테스트가 돌기전 beforeAll로 먼저 생성해놔야 한다고 하여 beforeAll(done => { request(app) .post('/users/signin') .send({ email: 'test_123@gmail.com', password: 'test_password', }) .end((err, response) => { token = response.body.token; // sa..
20.03.25 ShareBook TIL 유저 로그인 test 작성 데이터베이스에 들어있는 유저와 비교하여 같은 값이면 status 200을 보낸다. test('should respond user id to signin data', async done => { const response = await request(app) .post('/users/signin') .send({ email: 'test_123@gmail.com', password: 'test_password', }); expect(response.status).toEqual(200); done(); }); 데이터베이스에 들어있지 않은 유저는 에러를 출력한다. test('should respond NOT FOUND with unvalid user', async done => { c..
20.03.24 ShareBook TIL 중간 배포를 위해 EC2, RDS를 다시 설정하였다. EC2에 git에서 clone을 하고 서버를 작동시켜보니 ts로 돌려서 그런지 작동하지 않고 대기 상태로 있다가 timeout같은 시간 초과 에러가 났다. 그리고 갑자기 EC2 자체가 느려져서 nodejs를 삭제하고 다시 nvm으로 높은 버전의 node를 설치하였다. 그리고 나서 혹시 js로 돌리면 될까 해서 tsc로 js로 변환한뒤 돌려보니 RDS와 연결이 되지 않는 에러가 생겼다. workbench로 RDS를 연결했을 때는 정상적으로 작동해서 EC2에서 잘 못 설정한게 있다고 생각했다. 그래서 local에서 한번 config.json을 수정하고 연결하여도 똑같은 에러가 발생했다. 그럼 보안 설정에서 문제인가 싶어서 EC2, RDS 보안 그룹에서 설..
20.03.23 ShareBook TIL 유저 회원 가입 test 작성 test 유저 데이터를 작성한다. // __test__/fixtures/users.json [ { "name": "test_아이언맨", "nickname": "test_빌런", "email": "test_123@gmail.com", "password": "test_password", "gender": "test_남자", "region": "test_서울 관악구 봉천동" } ] test가 실행되면 테이블을 비우고 만들어 놓은 test 유저 데이터를 생성한다. beforeEach(async () => { await Users.destroy({ where: {}, truncate: false }); await Users.create(usersFixture[0]); }); 회원 가..
20.03.22 ShareBook TIL Jest를 이용하여 typescript에서 express server 실행 테스트 프로젝트를 하면서 test를 한 번 만들어 보고 싶어서 jest를 사용하여 먼저 server 실행 테스트를 만들어 보았다 jest에서 typescript를 실행하기 위한 ts-jest와 request를 사용하기 위해 supertest 모듈, jest의 type, supertest의 type 모듈을 설치한다 npm install --save-dev ts-jest supertest @types/jest @type/supertest jest typescript __test__폴더를 만들고 테스트할 파일 이름은 {파일 이름}.test.ts로 만든다. package.json에서 jest 설정 정보를 넣는다. { "jest": { "..
20.03.21 ShareBook TIL books table에서 해당 유저 id가 들어 있는 컬럼은 제외하고 데이터를 불러와야해서 Sequelize에서 [Op.notIn] 이란 걸 사용해야 했다. 그러려면 sequelize에 있는 Op란걸 사용해야하는데 아무리 찾아봐도 사용법만 나오고 이걸 불러와야 된다는 말은 없어서 많이 돌아돌아 갔다. import { Op } from 'sequelize'; 그러다 require 와 import의 차이점이 궁금해졌다. 찾아보니 require는 동적으로 모듈을 불러오지만, 불필요한 코드들까지 불러오기때문에 실제로 어떤 코드가 사용되는지는 알 수가 없다고 한다. const sequelize = require('sequelize'); const Op = sequelize.Op; 그래서 사용할 코드들을 다시 지정..
20.03.20 ShareBook TIL 팀원 분과 server api 문서를 작성 및 세부 사항을 수정하였다. 유저가 해당 도서를 선택하면 isRental의 상태값이 대여 요청으로 변경되고 userBorrowId에는 유저의 id가 들어 갈수 있는 함수를 작성하였다. import { Request, Response, NextFunction } from 'express'; import { Books } from '../../../models/Books'; import jwt from 'jsonwebtoken'; const jwtSecret = String(process.env.JWT_SECRET); module.exports = { post: async (req: Request, res: Response) => { const { id } = re..