테스트중 서버쪽을 담당하는 나와 페어의 2개의 서버를 사용하였었는데
클라이언트쪽에서 이것때문에 에러가 발생했다고 한다.
찾아보니 이런경우 사용자가 사이트간 요청위조(CSRF)를 할수 있어 보안적으로 취약하다고 한다.
먼저 에러핸들링에 대해
//아래와 같이 에러가 무엇인지에 대한 부분을 확인하는과정은 없었다.
.catch(()=>{
res.status(400).send({error: '400 Bad Request'})
/*프로젝트 오피스아워에 질문한 결과 이런경우 console.log를 API초입에 넣어서 요청이
API까지 잘 들어오는지 확인하고, 이후 req.body를 통해 요청 값들이 잘 들어오는지 확인한다.
그럼에도 불구하고 에러가 난다면 에러코드를보고 해당부분에 가서 err를 console.log로 확인해본다.*/
.catch((err)=>{
console.log(err);
res.status(400).send({error: '400 Bad Request'});
// 확인결과 데이터베이스 연결이 안되어있었다.
describe('POST /login', () => {
test('login success', async (done) => {
const response = await request(app).post('/login').send({
"email": "praconfi@gmail.com",
"password": "dksld",
})
expect(response.status).toBe(200);
expect(response.body).toHaveProperty('id', 'email', 'username');
done();
}, 30000);
})
비동기적으로 작동하는 부분이 테스트내에서 끝나지 않았다는 내용이다.
구글링결과 테스트의 마지막에 done();을 붙이라고 해서 다 붙였는데도 같은증상이 보여서
아래 설명에서 하라는대로 --detectOpenHandlers를 붙이니 해결되었다.
항상 테스트케이스를 통과하기위해 스프린트들을 진행해왔는데, 이제보니 참 잘만들어진 테스트들 이었다는 생각이 든다. 해당 내용을 잘 이해했는지를 확인할수있게 도와주는 테스트를 만드는것은 테스트를 푸는것의 몇배의 노력이 들것같다.