상세 컨텐츠

본문 제목

쿼리식의 결과가 없을 수도 있지.

TIL (Today I Learned)

by 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
반응형

관련글 더보기