From 6bae5cf185ced59d4c6a2aaf6c816d67b7581ca9 Mon Sep 17 00:00:00 2001
From: BangDori <44726494+BangDori@users.noreply.github.com>
Date: Wed, 8 May 2024 14:18:19 +0900
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=ED=94=BC=EB=93=9C=20=EB=A9=94?=
=?UTF-8?q?=EC=9D=B8=20=EB=AA=A9=EB=A1=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?=
=?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=20(#39)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: 피드 메인 목록에 대한 테스트 코드 작성
* style: 피드 메인 리스트 테스트 타이틀 수정
* style: 파일명 수정
---
.../test/FeedMainList.error.test.tsx | 29 +++++++++
.../feed-main-list/test/FeedMainList.test.tsx | 65 +++++++++++++++++++
2 files changed, 94 insertions(+)
create mode 100644 src/widgets/feed-main-list/test/FeedMainList.error.test.tsx
create mode 100644 src/widgets/feed-main-list/test/FeedMainList.test.tsx
diff --git a/src/widgets/feed-main-list/test/FeedMainList.error.test.tsx b/src/widgets/feed-main-list/test/FeedMainList.error.test.tsx
new file mode 100644
index 0000000..92e5eb8
--- /dev/null
+++ b/src/widgets/feed-main-list/test/FeedMainList.error.test.tsx
@@ -0,0 +1,29 @@
+import { HttpResponse, http } from 'msw';
+import { expect, test } from 'vitest';
+
+import { server } from '@/setupTest';
+import { render, screen } from '@/shared/tests/setup';
+
+import { FeedMainList } from '..';
+
+test('피드 메인 페이지 에러 발생 시, 네트워크 에러 메시지가 화면에 표시된다.', async () => {
+ // given
+ server.use(
+ http.get('/feeds', async () => {
+ return new HttpResponse(null, { status: 524 }); // 타임아웃 에러 반환
+ }),
+ );
+ render();
+
+ const errorTitle = await screen.findByRole('heading', {
+ level: 1,
+ name: '인터넷에 연결되지 않았어요',
+ });
+ const retryButton = await screen.findByRole('button', {
+ name: '재시도하기',
+ });
+
+ // then
+ expect(errorTitle).toBeInTheDocument();
+ expect(retryButton).toBeInTheDocument();
+});
diff --git a/src/widgets/feed-main-list/test/FeedMainList.test.tsx b/src/widgets/feed-main-list/test/FeedMainList.test.tsx
new file mode 100644
index 0000000..4e5e290
--- /dev/null
+++ b/src/widgets/feed-main-list/test/FeedMainList.test.tsx
@@ -0,0 +1,65 @@
+import { HttpResponse, http } from 'msw';
+import { describe, expect, it } from 'vitest';
+
+import { server } from '@/setupTest';
+import { render, screen } from '@/shared/tests/setup';
+
+import { FeedMainList } from '..';
+
+const mockingFeedData = [
+ {
+ id: 1,
+ user: { id: 1, profileImage: '', name: '강병준' },
+ content: 'Feed Content 1',
+ images: [],
+
+ likeCount: 0,
+ commentCount: 0,
+
+ isLiked: false,
+ isBookmark: false,
+
+ createdAt: '2024-04-16 12:00:00',
+ updatedAt: '2024-04-16 12:00:00',
+ },
+];
+
+describe('피드 메인 페이지에서', () => {
+ it('스켈레톤 UI가 화면에 먼저 렌더링된다.', async () => {
+ // given
+ render();
+ const skeletonFeedMainList = document.querySelector(
+ '.skeleton-feed-section',
+ );
+
+ // then
+ expect(skeletonFeedMainList).toBeInTheDocument();
+ });
+
+ it('스켈레톤 UI 이후 콘텐츠가 정상적으로 렌더링된다.', async () => {
+ // given
+ server.use(
+ http.get('/feeds', async () => {
+ return HttpResponse.json(
+ {
+ code: '2000',
+ data: {
+ feeds: mockingFeedData,
+ currentPageNumber: 1,
+ pageSize: 1,
+ numberOfElements: 1,
+ hasNextPage: false,
+ },
+ },
+ { status: 200 },
+ );
+ }),
+ );
+ render();
+
+ const content = await screen.findByText(mockingFeedData[0].content);
+
+ // then
+ expect(content).toBeInTheDocument();
+ });
+});