describe('/api/card에서는 ', () => {
/* 명함 생성 테스트 */
test(
'POST /create 성공 시 201',
done => {
request(app)
.post('/api/card/create')
.set('Content-Type', 'multipart/form-data')
.attach('image', './tests/dummy.png')
.field('user_id', '9999')
.field('nickname', '테스트닉네임')
.expect(201)
.end(() => {
done();
});
},
TIMELIMIT,
);
위와 같이 헤더에서 Content-Type을 명시하고, 첨부파일-attach, 일반 텍스트-field로 form의 내용을 채울 수 있다.
timeout 에러가 발생했던 코드
describe('/api/card에서는 ', () => {
/* 명함 생성 테스트 */
test(
'POST /create 성공 시 201',
done => {
request(app)
.post('/api/card/create')
.set('Content-Type', 'multipart/form-data')
.attach('image', './tests/dummy.png')
.field('user_id', '9999')
.field('nickname', '테스트닉네임')
.then(response => {
expect(response.statusCode).toBe(201);
done();
});
},
TIMELIMIT,
);
나는 다른 테스트들 처럼 then을 쓰면 될 것이라 생각했다.
그런데 test를 local과 github action이든 관계없이 계속 fail해버리는 것이었다...
다른 post나 get은 잘 되었고, 그 post를 복사해온 것이기 때문에 이것도 괜찮을 것이라 생각했다.
"음,,, timeout이 발생하니 limit을 올려야겠다!" 라고 생각해 테스트용 정말 작은 이미지도 준비하고, limit을 20배 ~ 100배까지 키워봤다.
그런데 늘리는 족족 30분, 1시간, .. 계속 타임아웃이 났다.
그래서 나는 "아하 DB가 AWS 프리티어에서 돌고 있어서 트랜잭션이 느리구나!" 라고 생각해 AWS ec2.micro에서 돌아가던 DB를 GCP에서 그나마 좀 나은 거로 바꿔봤다.
결과는 역시 fail.
결국 나는 "github action 돌아가는 환경이 느린 것 같으니 젠킨스를 도입해서 괜찮은 VM에서 돌아가게 해야겠다!" 라고 생각했다. -> 이는 정말 바보같은 생각이었다. 내 노트북에서도 안 되는데 컴퓨터 스펙이 좋으면 될 것이라 생각한 것이다... 무슨 GPU라도 달아서 쓰려고 한 건지 바보같다...
그리고 limit을 올리는 첫번째 방법을 반복할 즈음,, 내가 요청을 이상하게 하고 있는 게 아닌가 생각했다.
다른 post들에는 send같은 게 있는데 이 post는 send가 없었다... send를 넣어보니 send는 attach나 field랑 같이 쓸 수 없다고 한다. 그래서 뭔가 이상하다 싶었다.
구글링을 해 다른 코드를 살펴보니, then안에서 expect를 쓰는 게 아니고 바로 expect를 쓴다는 것을 확인하고 expect를 then에서 꺼냈더니 테스트가 바로 성공했다 ㅠ
'코딩코딩 > 웹개발' 카테고리의 다른 글
[기록용] 카카오 소셜 로그인 (0) | 2023.06.04 |
---|---|
JavaScript에서 Map과 Object의 차이 (0) | 2022.07.10 |
express 프로젝트 설정하기 - 근데 이제 pre-commit에 eslint와 prettier를 곁들인 (0) | 2022.07.08 |
node pre-commit 훅 설정하는데 참고한 글들 (0) | 2022.07.07 |
[nodejs, npm] npm install이 너무 느릴 때 (0) | 2022.03.25 |
댓글