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이 나온다.
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이 나온다. / 라고 내가 의아했던 결과가 이렇게 나오는것
db) 정규화 (0) | 2022.03.06 |
---|---|
js) find, map, filter (0) | 2022.02.17 |
mysql) cli를 활용하여 docker 내 mysql 접속하기 (0) | 2022.02.13 |
환경 설정) test run (feat. debug) (0) | 2022.02.09 |
호스팅형 vs 설치형 (feat. Cloud hosting vs Self hosting) (0) | 2022.02.07 |