TIL (Today I Learned)
쿼리식의 결과가 없을 수도 있지.
NayC
2022. 3. 15. 01:57
728x90
상황
it('orderNo에 따라 사은품이 나오는지 확인', async () => {
// const orderNo = OrderMySqlQueryHelper.insertOrder(dbMockHelper.conn, {});
const orderNo = '아무 번호';
await request(app)
.get(`/users/gift/${orderNo}`)
.expect(404)
});
-> '아무 번호'라고 넣어줘서는 당연히 404가 나올 줄 알고 테스트 코드를 돌려봤지만, 계속 200이 나온다.
it('orderNo에 따라 사은품이 나오는지 확인', async () => {
// const orderNo = OrderMySqlQueryHelper.insertOrder(dbMockHelper.conn, {});
const orderNo = '아무 번호';
await request(app)
.get(`/users/gift/${orderNo}`)
.expect((res) => {
console.log('res의 정체', res.body);
});
});
-> res.body는 { reasons: [] } 로 나와서는 api 호출 상태 결과로 200이 나온다.
내가 예상한 결과 -> 404
router.get('/users/gift/:orderNo', (req, res) => {
const orderNo = req.params.orderNo;
if (!orderNo) {
res.json({ reasons: [] });
return;
}
UserAuthenticator.authorize({ req })
.then(() => Gift.giftWithOrderNo(undefined, { orderNo }))
.then((gift) => { res.json({ gift }); })
.catch((err) => {
ErrorReporter.report(err, (status, msg) => {
res.status(status).json({ msg: req.__(msg) });
});
});
});
내가 '추정'하기로는,
Gift.giftWithOrderNo(undefineds, { orderNo })) 에 '아무 번호'가 전달이 되었으니,
-> "저런건 쿼리식에 들어가면 에러가 날거야"라고 생각했다.
추정하는 것과 실제 코드는 다르다.
-> 프론트 단을 살펴보면,
데이터가 있으면 modal창을, 에러가 나면 에러 메시지를 띄우는 코드가 존재.
데이터가 없으면 에러를 낸다는 코드는 존재하지 않음.
✅ 도메인 지식이 중요한 이유.
상식적으로 생각해보면, 주문 번호에 따라 사은품이 있을 수도 없을 수도 있는건데 데이터가 없으면 무조건 에러가 날거라고 생각했던건 잘못된 생각. (즉, 결과가 없는거지 404 에러가 날 이유가 없는 것)
sql식 관련해서 더 적어보자면, 만약 '아무 번호'가 orderNo로 전달이 되면 그 주문번호에 맞는 사은품이 없으니 resolve(rows)에 아무것도 담지 않고, 앞에 promise를 받는 곳에서 아래와 같이 받아서
.then((gift) => { res.json({ gift }); })
-> res.body는 { reasons: [] } 로 나와서는 api 호출 상태 결과로 200이 나온다. / 라고 내가 의아했던 결과가 이렇게 나오는것
728x90
반응형