diff --git a/src/pages/listings/components/CriteriaTab.jsx b/src/pages/listings/components/CriteriaTab.jsx
index 5ea32a6..19e8804 100644
--- a/src/pages/listings/components/CriteriaTab.jsx
+++ b/src/pages/listings/components/CriteriaTab.jsx
@@ -59,7 +59,8 @@ const CriteriaTab = () => {
} finally { setSaving(false); }
};
- if (loading || !c) return
불러오는 중…
;
+ if (loading) return 불러오는 중…
;
+ if (!c) return {msg || '조건을 불러오지 못했습니다.'}
;
return (
diff --git a/src/pages/listings/components/CriteriaTab.test.jsx b/src/pages/listings/components/CriteriaTab.test.jsx
index 1e00c45..bc60174 100644
--- a/src/pages/listings/components/CriteriaTab.test.jsx
+++ b/src/pages/listings/components/CriteriaTab.test.jsx
@@ -21,4 +21,11 @@ describe('CriteriaTab', () => {
expect(screen.getByLabelText(/연소득/)).toBeInTheDocument();
expect(screen.getByDisplayValue('신대방동, 상도동')).toBeInTheDocument();
});
+
+ it('로드 실패 시 무한 로딩 대신 에러를 표시', async () => {
+ getListingsCriteria.mockRejectedValue(new Error('HTTP 500'));
+ render();
+ await waitFor(() => expect(screen.getByText(/불러오지 못했|HTTP 500/)).toBeInTheDocument());
+ expect(screen.queryByText('불러오는 중…')).not.toBeInTheDocument();
+ });
});